J'ai besoin de mettre à jour toutes les lignes d'une base de données afin qu'un champ particulier dans tous soit égal à une seule valeur. Voici un exemple.
Disons que ma table de base de données ressemble à ceci:
id | data | confirmed
1 | someData | 0
2 | someData | 1
3 | someData | 0
Je souhaite effectuer une requête qui définit le champ confirmé de chaque ligne sur 1.
Je pourrais le faire de cette façon:
$rows = MyModel::where('confirmed', '=', '0')->get();
foreach($rows as $row) {
$row->confirmed = 0;
$row->save();
}
Mais il semble qu'il y aurait une meilleure façon? Une seule requête qui dirait simplement "définissez le champ" confirmé "de chaque ligne sur 1."
Une telle requête existe-t-elle dans Eloquent/Fluent de Laravel?
Eh bien, une réponse simple: non, vous ne pouvez pas le faire avec éloquence. Un modèle représente 1 ligne dans la base de données, cela n'aurait aucun sens s'ils l'implémentaient.
Cependant, il existe un moyen de le faire avec fluidité:
$affected = DB::table('table')->update(array('confirmed' => 1));
ou encore mieux
$affected = DB::table('table')->where('confirmed', '=', 0)->update(array('confirmed' => 1));
Juste pour garder ce fil à jour, vous pouvez mettre à jour toutes les lignes par rapport à un modèle Eloquent directement en utilisant:
Model::query()->update(['confirmed' => 1]);
Vous pouvez le faire avec éloquent (laravel 4):
MyModel::where('confirmed', '=', 0)->update(['confirmed' => 1])