Ответ 1
Для обработки этой формы вам не нужен какой-либо другой код в контроллере. Все ваши (названные) переменные формы будут в Input:: all().
Модель ($ user), которую вы передаете в
Form::model($user, array('route' => array('user.update', $user->id)))
Это только любая запись, в которой вы нуждаетесь, если у вас более одной таблицы, вам нужно сделать что-то вроде
$user = User::where('id',$userID)
->leftJoin('users_addresses', 'users_addresses.user_id', '=', 'users.id')
->first();
И передайте эту скомпонуемую модель в вашу форму:: model().
Как вы называете свои входы полностью зависит от вас, потому что вам придется написать логику для обработки вашей формы. Но, на мой взгляд, users_address[street]
для адресных входов хорошо, потому что вы получите массив столбцов адресов, которые вы можете передать сразу в свою модель UserAddress.
<html>
<head>
<title></title>
</head>
<body>
{{ Form::model($user, array('route' => array('user.update', $user->id))) }}
{{ Form::label('first_name', 'First Name:', array('class' => 'address')) }}
{{ Form::text('first_name') }}
{{ Form::label('last_name', 'Last Name:', array('class' => 'address')) }}
{{ Form::text('last_name') }}
{{ Form::label('email', 'E-Mail Address', array('class' => 'address')) }}
{{ Form::text('email') }}
{{ Form::label('address[street1]', 'Address (Street 1)', array('class' => 'address')) }}
{{ Form::text('address[street1]') }}
{{ Form::label('address[street2]', 'Address (Street 2)', array('class' => 'address')) }}
{{ Form::text('address[street2]') }}
{{ Form::label('ddress[city]', 'City', array('class' => 'address')) }}
{{ Form::text('address[city]') }}
{{ Form::label('address[state]', 'State', array('class' => 'address')) }}
{{ Form::text('address[state]') }}
{{ Form::label('address[zip]', 'Zip Code', array('class' => 'address')) }}
{{ Form::text('address[zip]') }}
{{ Form::submit('Send this form!') }}
{{ Form::close() }}
</body>
</html>
И если вы делаете dd( Input::all() )
в своем контроллере, вы получите что-то вроде этого:
Этот результат предоставляется Kint dd(): https://github.com/raveren/kint. Действительно полезно.
Если ваша форма имеет только поля из одной модели, ваш метод обновления может быть очень простым и выглядеть примерно так:
public function update($id)
{
$user = User::find($id);
if (!$user->update(Input::all())) {
return Redirect::back()
->with('message', 'Something wrong happened while saving your model')
->withInput();
}
return Redirect::route('user.saved')
->with('message', 'User updated.');
}
В формах немного сложнее, кодеры должны будут добавить больше логики к своим контроллерам, в вашем случае с небольшим количеством исследований, я думаю, вы можете это сделать:
public function update($id)
{
$user = User::find($id);
$inputs = Input::all();
if (!$user->update($inputs)) {
$address = new UserAddress($inputs['address']);
$user->address()->save($address);
...
}
...
}