Laravel 4: Comment mettre à jour plusieurs champs dans un modèle éloquent?
Comment puis-je mettre à jour plusieurs champs dans un modèle éloquent? Disons que je l'ai eu comme ceci:
$user = User::where("username", "=", "rok");
Et puis j'ai tous ces paramètres de modèle:
$new_user_data = array("email" => "rok@rok.com", "is_superuser" => 1, ...);
je ne peux pas simplement faire:
$user->update($new_user_data);
Quelle est la bonne manière? Je n'espère pas un foreach
.
Le code suivant fonctionne, cependant. Est-ce la voie à suivre?
User::where("id", "=", $user->id)->update($new_user_data);
le problème avec le dernier (en plus d'être clunky) est que lorsqu'on l'utilise à partir d'un contexte objet, la mise à jour les champs ne sont pas visibles dans l' $this
variable.
4 réponses
La méthode que vous cherchez est 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();
en Fait, vous pourriez faire $user->fill($new_user_data)->save();
mais je trouve les déclarations séparées un peu plus faciles à lire et à déboguer.
Vous cherchez ceci:
$user = User::where("username","rok")
->update(
array(
"email" => "rok@rok.com",
"is_superuser" => 1,
// ..
)
);
Voir : http://laravel.com/docs/4.2/eloquent#insert-update-delete
je devrais suggérer d'utiliser un code plus court, comme
$new_user_data=array('a'=>'n','b'=>'m');
$user=User::whereUsername('rok');//camelCase replaces "=" sign
$user->fill($new_user_data)->save();
ou même plus court
$new_user_data=array('a'=>'n','b'=>'m');
User::whereUsername('rok')->update($new_user_data);//camelCase replaces "=" sign
je crois que la dernière affirmation est plus facile à déboguer et semble plus agréable.
Attention: si votre table contient beaucoup d'utilisateurs nommés 'rok' les deux déclarations mentionnées mettront à jour tous ces registres à la fois. Vous devez toujours mettre à jour les registres avec la valeur du champ id.
Essayez ceci,
// 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)
);