我在使用updateOrCreate时遇到问题。
以下代码是SUCCESSFULLY创建一个新行;但是,当涉及到更新现有行时,它根本不起作用!
comm_helpful::updateOrCreate(
['ID' => 1],
['time' => 3000]
);
这完全符合预期:
comm_helpful::where('ID', 1)->update(['time' => 3000]);
我已经将上面的例子删回到最低限度(我在调试过程中做了)并且它仍然没有工作!!
答案 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';