with wherepivot many hasone hasmany examples example ejemplo belongsto attach php ruby-on-rails laravel laravel-4

php - many - wherepivot laravel



Nesting Models Relations In Forms-Laravel (3)

Ahora puede usar el paquete "modelform" para crear un formulario para varios modelos o incluso un conjunto de formularios para las relaciones.

https://github.com/andersondanilo/modelform

En laravel, ¿hay alguna manera de anidar recursos relacionados en una forma?

Digamos que tengo esto:

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

y quiero que un formulario de Person recopile información sobre la dirección de esa Person . ¿Facilita laravel esto de una manera que sea equivalente a los accepts_nested_attributes_for :address y fields_for :address ?

Me gustaría algo simple donde pueda incluir los campos Address con los resultados del formulario Person , ya que la Address no existe realmente aparte de la Person . ¿Esto tiene sentido?

== EDITAR ==

Este es un código hipotético

Lo que estoy buscando es algo que se parecería a esto:

{{ 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() }}


Debe gestionar todo esto desde su controlador. Reúna los datos del formulario y úselos como desee:

// 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);

Véalo en los documentos


Estás en el camino correcto con los nombres de entrada.

Formar

// 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

Si desea agregar direcciones, deberá generar alguna clave aleatoria para usar en lugar de la id de la dirección. Esto mantendrá los campos agrupados.

Lógica del controlador

Así es como manejaría la entrada, usando ''rellenable'' para filtrar los datos que entran en los modelos.

// 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(); }