用户 hasOne 汽车。
用户
id | name
1 | Bob
2 | Alice
汽车
idMember | color | energy
1 | blue | 0.95
在用户类中,我有
public function car()
{
return $this->hasOne('App\Car','idMember');
}
我想在关系模型上调用updateOrCreate,如下所示:
$user->car()->updateOrCreate(['idMember' => $user->id], ['color' => 'red', 'energy' => '0.1']);
但是,我收到错误消息
“SQLSTATE [42S22]:未找到列:1054未知列'id'在'where 子句'(SQL:更新
cars
设置color
=红色,energy
= 0.1,updated_at
= 2018-01-12 15:26:47其中id
为空)
他为什么要找
id
为空
答案 0 :(得分:3)
请注意,您的原始语法正确。您可以在关系上使用它:
$user->car()->updateOrCreate(['idMember' => $user->id], [
'color' => 'red',
'energy' => '0.1',
]);
这将检查是否存在带有car
的{{1}};如果是这样,请更新idMember === $user->id
和color
。如果没有,它将使用energy
,car
和idMember
创建一个color
记录。
我还没有测试过,但是基于第一个参数的数组类型,您应该能够传递多个匹配条件,例如
energy
答案 1 :(得分:1)
您的汽车型号应该有一个主键,通常称为“id”。创建它。
答案 2 :(得分:1)
这就是我在没有为汽车模型添加不必要的自动递增ID的情况下解决问题的方法:
class Car extends Model
{
protected $primaryKey = 'idMember';
public $incrementing = false;
答案 3 :(得分:-1)
在你的模型中提到primaryKey,如果primarykey不是" ID"
protected $primaryKey = "Your Primary Key";
如果您不需要icnrementing主键
public $incrementing = false;
多数民众赞成......