2013-03-25 51 views
18

我需要更新数据库中的所有行,以便它们的所有中的特定字段等于单个值。这是一个例子。如何使用Laravel的Eloquent/Fluent将每一行设置为相同的值?

比方说,我的数据库表就像这样:

id | data | confirmed 
1  | someData |  0 
2  | someData |  1 
3  | someData |  0 

我想执行一个查询,将每一行的证实领域1.

我能做到这样:

$rows = MyModel::where('confirmed', '=', '0')->get(); 
foreach($rows as $row) { 
    $row->confirmed = 0; 
    $row->save(); 
} 

但似乎会有更好的办法?一个简单的查询就是“将每一行'确认'字段设置为1”。

在Laravel的Eloquent/Fluent中是否存在这样的查询?

回答

37

好吧,一个简单的答案:不,你不能用雄辩。一个模型表示数据库中的一行,如果他们实现了这一点就没有意义。

然而,有一种方法用流利的做到这一点:

$affected = DB::table('table')->update(array('confirmed' => 1)); 

甚至更​​好

$affected = DB::table('table')->where('confirmed', '=', 0)->update(array('confirmed' => 1)); 
11

你可以用elquent做到这一点(laravel 4):

MyModel::where('confirmed', '=', 0)->update(['confirmed' => 1]) 
23

只是为了保持这个线程是最新的,您可以直接使用以下方法对照Eloquent模型更新所有行:

Model::query()->update(['confirmed' => 1]); 
+0

这就是我要找的!谢谢! – 2018-01-17 06:16:07

相关问题