Laravel 4: как обновить несколько полей в модели Eloquent?
Как обновить несколько полей в модели Eloquent? Скажем, я понял это так:
$user = User::where("username", "=", "rok");
И тогда у меня есть все эти параметры модели:
$new_user_data = array("email" => "[email protected]", "is_superuser" => 1, ...);
Я не могу просто сделать:
$user->update($new_user_data);
Каким образом? Надеюсь, это не foreach
.
Однако работает. Это путь?
User::where("id", "=", $user->id)->update($new_user_data);
Проблема с последней (помимо неуклюжего) заключается в том, что при использовании ее из контекста объекта обновленные поля не видны в переменной $this
.
Ответы
Ответ 1
Метод, который вы ищете, - fill()
:
$user = User::where ("username","rok"); // note that this shortcut is available if the comparison is =
$new_user_data = array(...);
$user->fill($new_user_data);
$user->save();
На самом деле вы могли бы сделать $user->fill($new_user_data)->save();
но я считаю, что отдельные инструкции немного легче читать и отлаживать.
Ответ 2
Вы ищете:
$user = User::where("username","rok")
->update(
array(
"email" => "[email protected]",
"is_superuser" => 1,
// ..
)
);
См. Http://laravel.com/docs/4.2/eloquent#insert-update-delete
Ответ 3
Я должен предлагать использовать более короткий код, например
$new_user_data=array('a'=>'n','b'=>'m');
$user=User::whereUsername('rok');//camelCase replaces "=" sign
$user->fill($new_user_data)->save();
Или даже короче
$new_user_data=array('a'=>'n','b'=>'m');
User::whereUsername('rok')->update($new_user_data);//camelCase replaces "=" sign
Я считаю, что последнее утверждение легче отлаживать и выглядит лучше.
Предупреждение. Если в таблице содержится много пользователей с именем "rok", оба упомянутых оператора будут обновлять все эти регистры сразу. Вы всегда должны обновлять регистры с использованием значения поля id.
Ответ 4
Попробуй это,
// took required data out of the request
$postData = request(
[
'firstName',
'lastName',
'address1',
'address2',
'address3',
'postcode',
'phone',
'imageURL',
]
);
// persisted it to the database
DB::table('users')
->where('id', auth()->user()->id)
);