Laravel:关于关系的UpdateOrCreate?

时间:2018-01-12 15:36:05

标签: php laravel-5 eloquent

用户 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为空

4 个答案:

答案 0 :(得分:3)

请注意,您的原始语法正确。您可以在关系上使用它:

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

这将检查是否存在带有car的{​​{1}};如果是这样,请更新idMember === $user->idcolor。如果没有,它将使用energycaridMember创建一个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;

多数民众赞成......