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(); но я считаю, что отдельные инструкции немного легче читать и отлаживать.

Ответ 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)
);