如何结合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
相关产品推荐
相关产品推荐

