Intereting Posts
Поиск последнего дня предыдущего месяца в PHP Безопасно ли хранить пароль в сеансе? Объединение файлов в один PDF-файл с использованием PHP / linux WordPress Theme Customizer – добавление области для перемещения пользователей и организации виджетов Как использовать модуль с PHP для добавления класса CSS в сетку изображений в зависимости от двух разных шаблонов? php для извлечения строки из двойной кавычки Модель Laravel с POINT / POLYGON и т. Д., Используя DB :: raw выражения Последний элемент в цикле foreach – это массив, который он перемещает php exec, как видеть прогресс Справка PHP Regex для парсинга Цена из строки Как создавать эскизы на Amazon S3? Игнорирование ошибок в HTTP-оболочке file_get_contents? Запрос аудио / видеофайла для информации Есть ли открытый код для создания «предварительного просмотра ссылок» и значков, например, в facebook? codeigniter разрешает «http: //» в переменной get

Вложенные модели отношений в формах – Laravel

В laravel существует ли способ вложения связанных ресурсов в форму?

Скажем, у меня это:

class Person extends Eloquent { public function addresses() { return $this->hasMany("Address"); } } class Address extends Eloquent { public function person() { return $this->belongsTo("Person"); } } 

и я хочу, чтобы форма Person собирала информацию об Person этого Person . Поддерживает ли laravel это таким образом, который эквивалентен Rails ' accepts_nested_attributes_for :address и fields_for :address ?

Мне просто нужно что-то простое, где я могу включить поля Address с результатами формы Person , так как Address действительно не существует отдельно от Person . Имеет ли это смысл?

== EDIT ==

Это гипотетический код

То, что я ищу, – это нечто похожее на это:

 {{ Form::model(new Person, array("action" => "admin\PersonController@store", "method" => "POST")) }} {{ Form::text("name", array(...)) // <input name='person[name]' ... /> }} {{ Form::email("email", array(...)) // <input name='person[email]' ... /> }} {{ Form::fields_for("addresses"/* Would be name of relation */) }} {{ Form::text("street_address") // <input name='person[addresses][][street_address]' ... /> }} {{ Form::close_fields() }} {{ Form::close() }} 

Вы находитесь на правильном пути с именами ввода.

форма

 // Form open, Person fields, etc... <h2>Addresses</h2> @foreach ($addresses as $address) <fieldset> {{ Input::text('addresses['.$address->id.'][address_1]', $address->address_1) }} {{ Input::text('addresses['.$address->id.'][address_1]', $address->address_2) }} {{ Input::text('addresses['.$address->id.'][city]', $address->city) }} {{ Input::text('addresses['.$address->id.'][state]', $address->state) }} {{ Input::text('addresses['.$address->id.'][zip]', $address->zip) }} </fieldset> @endforeach // Form Close 

Если вы хотите добавить адреса, вам нужно создать случайный ключ для использования вместо идентификатора адреса. Это позволит сгруппировать поля.

Логика контроллера

Вот как я мог бы обрабатывать ввод, используя «fillable» для фильтрации данных, поступающих в модели.

 // Get the Person model, fill, save, etc... $addressIds = array(); foreach (Input::get('addresses', array()) as $id => $addressData) { $address = Address::find($id) ?: new Address; $address->fill($addressData); $address->save(); $addressIds[] = $address->id; } $changes = $person->addresses()->sync($addressIds); // Delete the unused addresses foreach ($changes['detached'] as $detachedAddressId) { $address = Address::find($detachedAddressId); if (!empty($address)) $address->delete(); } 

Теперь вы можете использовать пакет «modelform» для создания формы для разных моделей или даже набора форм для отношений.

https://github.com/andersondanilo/modelform

Вы должны управлять всем этим от своего контроллера. Соберите данные из формы и используйте их, как вам угодно:

 // Controller Code $person = new Person(array( 'field_1' => Input::get('field_1'), 'field_2' => Input::get('field_2'), ............. )); $person->save(); $address = new Address(array( 'field_x' => Input::get('field_x'), 'field_y' => Input::get('field_y'), ............. )); $person->addresses()->save($address); 

См. Его в документах