Eloquent updateOrCreate不更新

时间:2017-12-05 11:22:38

标签: php laravel eloquent slim

我在使用updateOrCreate时遇到问题。

以下代码是SUCCESSFULLY创建一个新行;但是,当涉及到更新现有行时,它根本不起作用!

comm_helpful::updateOrCreate(
           ['ID' => 1],
           ['time' => 3000]
        );

这完全符合预期:

comm_helpful::where('ID', 1)->update(['time' => 3000]);

我已经将上面的例子删回到最低限度(我在调试过程中做了)并且它仍然没有工作!!

2 个答案:

答案 0 :(得分:3)

我有类似的问题。 我的模特有:

protected $fillable = ['user_x_cliente_id','internet_cliente_id'];

状态为0。

           $habilita = leilao_habs::updateOrCreate(
                    [   'user_x_cliente_id' => $user_x_cliente->id,
                        'internet_cliente_id'   => $int_cli->id],
                        ['status'    => 1]
                    );

           dd($habilita);

执行updateOrCreate之后,状态仍然为0,并且没有出现MassAssignmentException错误。

解决方案是更改模型,将状态添加到受保护的$ fillable:

protected $fillable = ['user_x_cliente_id','internet_cliente_id','status'];

现在updateOrCreate可以更改状态。

答案 1 :(得分:1)

好吧,几乎完全拔掉我的头发;我找到了Eloquent设置的问题:

protected $primaryKey = 'id';

用于更新方法并由getKeyName()返回。

protected function setKeysForSaveQuery(Builder $query)
{

    $query->where($this->getKeyName(), '=', $this->getKeyForSaveQuery());

    return $query;
}

然后我意识到故事中的'id'是大写而不是小写!

我想这意味着我的答案是我需要确保我在主键上使用小写'id'或在模型上覆盖它

protected $primaryKey = 'ID';