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

Laravel关联模型调用updateOrCreate报错:为何查询id为null?

为什么调用updateOrCreate会出现where id is null的错误?

嘿,这个问题我之前踩过类似的坑,咱们一步步拆解原因和解决办法:

直接原因:Car模型的主键配置不符合你的表结构

Laravel的模型默认会把id当作表的主键字段,但你的cars表里根本没有id列——你用idMember来关联用户,同时这个字段也是cars表的唯一标识。

当你调用$user->car()->updateOrCreate(...)时,Laravel会先根据条件查找对应的Car记录:它找到了idMember=1的那条记录,但因为Car模型默认主键是id,而这条记录没有id值,Laravel就认为这条记录的主键是null。后续执行更新操作时,自然就生成了where id is null的错误SQL,最终触发了字段找不到的报错。

解决步骤

1. 给Car模型指定正确的主键

在App\Car模型里添加两行配置,告诉Laravel你的主键字段是什么:

// 指定cars表的主键为idMember
protected $primaryKey = 'idMember';

// 如果idMember不是自增整数类型(比如和user的id一致是整数,也可以加上这条更稳妥)
public $incrementing = false;

2. 优化updateOrCreate的调用(可选但推荐)

因为你是通过用户的关联car()来调用方法,Laravel已经自动把idMember = $user->id这个关联条件加到查询里了,所以你完全可以省略第一个参数里的冗余条件,简化成:

$user->car()->updateOrCreate([], ['color' => 'red', 'energy' => '0.1']);

这样调整后,Laravel就能正确定位到idMember=1的记录,更新时会生成where idMember = 1的条件,再也不会出现找不到列的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:52:30