Laravel update 更新

作者:扣丁禅师 来源:learnku.com 更新时间:2023-05-25 21:55

通常我们更新数据有以下几种方法:

方法 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 也就没有更新内容了,也会减少一次判断。

注意:通过 Eloquent 批量更新update时,不会触发模型的 savingsavedupdatingupdated 模型事件。 这是因为在批量更新时从未真正检索到模型。