Comment mettre à jour plusieurs champs dans un modèle Eloquent? Disons que je l'ai comme ça:
$user = User::where("username", "=", "rok");
Et puis j'ai tous ces paramètres de modèle:
$new_user_data = array("email" => "[email protected]", "is_superuser" => 1, ...);
Je ne peux pas simplement faire:
$user->update($new_user_data);
Quelle est la bonne façon? J'espère pas une foreach
.
Ce qui suit fonctionne cependant. Est-ce le chemin à parcourir?
User::where("id", "=", $user->id)->update($new_user_data);
Le problème avec le dernier (en plus du fait qu'il soit maladroit) est que, lorsqu'il est utilisé à partir d'un contexte d'objet, les champs mis à jour ne sont pas visibles dans la variable $this
.
La méthode que vous recherchez 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 instructions séparées un peu plus faciles à lire et à déboguer.
Vous recherchez ceci:
$user = User::where("username","rok")
->update(
array(
"email" => "[email protected]",
"is_superuser" => 1,
// ..
)
);
Voir: http://laravel.com/docs/4.2/eloquent#insert-update-delete
Je devrais suggérer d'utiliser un code plus court, tel que
$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 déclaration est plus facile à déboguer et est plus jolie .
Avertissement: Si votre table contient de nombreux utilisateurs nommés 'rok', les deux instructions mentionnées mettront à jour tous ces registres en même temps. Vous devez toujours mettre à jour les registres avec la valeur du champ id.
Essaye ça,
// 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)
);