【发布时间】:2020-06-21 01:16:14
【问题描述】:
用户拥有一辆汽车。
用户
id | name
1 | Bob
2 | Alice
汽车
idMember | color | energy
1 | blue | 0.95
在我拥有的 User 类中
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为空
?
【问题讨论】:
-
Laravel 期望每个实体都有一个名为
id的自动递增主键,拥有主键也是关系要求(尽管它可能是 laravel 不支持的复合键) .只需保存您的理智并在该表中添加一个自动递增的id列,以便所有内容都有一个唯一的ID。同样按照惯例,laravel 期望外键为<singular other table>_id即在您的情况下idMember应该是user_id(但您可以在hasOne参数中更改它) -
@apokryfos 哦,是的,你的权利.. 忘记了。但我宁愿更改我的汽车模型的
primaryKey,因为在 hasOne 关系中不需要 AI 密钥。 -
在一对一关系中,外键作为主键也是一种选择。