Laravel 5.1:如何使用where子句仅更新一行?

4

我想通过where子句来更新一行数据。 我没有行ID,只有2个where子句。 这是否可能? (使用Eloquent)

->where("x",1) ->where("y"=2)
4个回答

8

使用Active Record时,永远不要直接在数据库中执行更新操作。首先从数据库中获取记录,然后进行更新:

Model::where(['x' => 1, 'y' => 2])->first()->update([...]);

如果您直接在数据库中进行更新,则不会触发ORM功能(例如触发事件或触摸父级)。


3

更新所有符合条件的行:

Model::where("x",1)->where("y",2)->update(array('key' => 'new_value', ...));

第一行,对应条件:

Model::where("x",1)->where("y",2)->first()->update(array('key' => 'new_value', ...));

2

另外,要逐行更新表格,可以使用方法take(rows_count)。示例:

Model::query()->where(['x' => 1, 'y' => 2])
->take(1)->update(['x' => 4, 'y' => 5]);

1
当然,只需获取行并像平常一样更新即可。
SomeModel::where('somecondition', 'somevalue')
         ->where('someothercondition', 'someothervalue')
         ->first()
         ->update(['somecolumn' => 'somenewvalue']);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接