Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 24.07.2014 09:54:50

Алекс

Many to Many: как реализовать форму и её обработчик?

Добрый день.

Имею две модели: Objects и Features. Выглядит в базе все это так:

Objects: id, title, photo, ...
Features: id, title
Feature_Object: id, object_id, feature_id, count. - Обратите внимание на count.

Для Объекта можно указать любое количество Возможностей, дополнительно введя какое-то число. Например, Объект: Дом, Возможности: Окна (count=4), Двери (count=1) и т.д.

В форме добавления/редактирования Объекта вывожу чекбоксы и поля ввода:

@foreach($features as $feature)
<input type="checkbox" value="???" name="???"> <input type="text" name="???" value="1">
@endforeach

Как надо назвать эти два поля и какое значение должно быть в чекбоксе, чтобы Laravel при сохранении мог легко подхватить эти поля и заполнить таблицы в базе? Я имею в виду, что например для обычных полей я использую $object->fill(Input::get("object")); — это довольно удобно и просто.

#2 24.07.2014 14:22:32

Алекс

Re: Many to Many: как реализовать форму и её обработчик?

Решение моей проблемы - метод sync(). Получили такую форму:

@foreach($features as $feature)
<div class="checkbox">
          <label>
            <input id="feature-{{{$feature->id}}}" type="checkbox" value="true" name="feature[{{{$feature->id}}}][checked]">
            {{{$feature->title}}}
          </label>
          <label>
            <input type="text" name="feature[{{{$feature->id}}}][count]" value="1">
          </label>
        </div>
@endforeach

Сохранение объекта:

// получаем обычные данные объекта, это все умеют, опускаю эту часть
// далее не очень элегантное, но все же решение
$features = Input::get("feature");
    $feature_ids = [];
    foreach ($features as $key => $value) {
      if (isset($value['checked'])) {
        $feature_ids[$key]['feature_id'] = $key;
        $feature_ids[$key]['count'] = $value['count'];
      }
    }

    $object->feature()->sync($feature_ids);

Если кому-то надо решить такую же задачу — пользуйтесь на здоровье. А я буду рад, если кто-то подскажет мне и сообществу более элегантное решение.

#3 24.07.2014 15:55:10

Cheshirrski
masterМастер
Откуда: Днепр
Сообщений: 116
Статей: 2

Re: Many to Many: как реализовать форму и её обработчик?

PHPfeature[{{{$feature->id}}}][count] можно получить через связующую таблицу так: PHP$feature->pivot->count

Не в сети

Подвал раздела