You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合Where()条件与save()方法替代find()?

Laravel多条件查询结合Save更新数据的正确写法

你出错的核心原因是:find(1)返回的是单个模型实例,而直接用where([多条件])得到的是查询构造器(Builder)实例,不是可直接赋值属性的模型对象,必须通过first()方法获取符合条件的单个模型。

正确的代码写法有两种:

方式一:数组形式的多条件where

// 通过数组传递多条件,并用first()获取单个模型
$flight = App\Flight::where([
    ['id', '=', 1],
    ['status', '=', 'scheduled'] // 替换成你的第二个查询条件
])->first();

// 必须先判断模型是否存在,避免空对象调用save()报错
if ($flight) {
    $flight->name = 'New Flight Name';
    $flight->save();
}

方式二:链式调用where

如果条件不多,也可以用链式写法更直观:

$flight = App\Flight::where('id', 1)->where('status', 'scheduled')->first();

if ($flight) {
    $flight->name = 'New Flight Name';
    $flight->save();
}

关键注意点

  • 必须调用first():如果只写where([...]),得到的是查询构造器,不是模型实例,无法直接修改属性和调用save()。
  • 检查模型是否存在:如果没有匹配到数据,first()会返回null,直接调用save()会触发错误,所以一定要加判断。

内容的提问来源于stack exchange,提问作者user15187482

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:36:29