小心 Laravel update 数据的坑
通常我们更新数据有以下几种方法:
方法 1
$model = Model::find($id);
$model->field1 = $value1;
$model->field2 = $value2;
$model->save();
方法 2
Model::find($id)
->update([
'field1' => $value1,
'field2' => $value2,
]);
方法 3
Model::query()
->where('id', $id)
->update([
'field1' => $value1,
'field2' => $value2,
]);
三种方法都可以更新数据,如果是你,你会选择哪种方法?或者说哪个方法是性能最好的?
以下为更新内容,揭晓答案:
肯定不是标题党哦,本来是想个大家一个选择的过程,一起讨论。
答案是选择方法3,方法3 仅生成一条 SQL 如下:
update table set field1=value1, field2=value2 where id = $id;
方法1,方法2,都是形成两条SQL,会多一次查询语句:
select * from table where id = $id limit 1;
update table set field1=value1, field2=value2 where id = $id;
@Imuyu 提到 find 可能返回空,也是个值得注意的地方,直接update 没有 id 也就没有更新内容了,也会减少一次判断。
这里主要想分享下,多去关注 Elequent 的具体SQL内容,用的时候很爽,但如果没搞清楚底层实现,也会造成很多优化的麻烦。
推荐文章: