Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добрый день.
Имею две модели: 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")); — это довольно удобно и просто.
Решение моей проблемы - метод 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);
Если кому-то надо решить такую же задачу — пользуйтесь на здоровье. А я буду рад, если кто-то подскажет мне и сообществу более элегантное решение.
Не в сети
Страницы 1