在Laravel Eloquent中,updateOrCreate不起作用

10
我可以帮您进行文本翻译。以下是需要翻译的内容:

我想要更新或创建一个模型,但是一直无法成功。

这是我的代码:

foreach ($ProfileRequest as $fieldname => $value){
    ProfileRequest::updateOrCreate(['sm_id' => $uid, 'field_name' => $fieldname],
        [
            'sm_id' => $uid,
            'field_name' => $fieldname,
            'value' => $value
        ]);
    }

这是插入操作的工作示例:

 foreach ($ProfileRequest as $fieldname => $value) {
     $req = new ProfileRequest;
     $req->chef_id = $uid;
     $req->field_name = $fieldname;
     $req->value = $value;
     $req->save();
 }

2
请描述具体哪些部分出了问题,您正在做什么以及遇到了什么错误。 - Alexey Mezenin
此代码不会创建或更新相同的内容。 - Manish Jakhmola
当 $req = new ProfileRequest; $req->chef_id = $uid; $req->field_name = $fieldname; $req->value = $value; $req->save(); 正常运作。 - Manish Jakhmola
3个回答

34

由于您正在处理大量更新,请在模型中指定可填充字段。将其放在您的模型中。

protected $fillable = ['field_name','value'];

1
我刚在 Seeder 文件中运行 updateOrCreate(),它在那里完美地工作,但在控制器中却不行。这让我困扰了一段时间,我不明白原因,但是你的答案就是导致问题的原因。现在看来如此明显。 - Matt Kieran
1
这个答案救了我的一天,感谢回答。对于遇到“字段'field_name'没有默认值”的错误的人来说,这个答案可能会有用。 - Semih Arslanoglu
你是一个英雄... - aspiringsoftwaredev

4

-1

这个有效

foreach ($ProfileRequest as $fieldname => $value){
    ProfileRequest::firstOrNew(array('sm_id' => $uid, 'field_name' => $fieldname));
            $chefReq->sm_id = $uid;
            $chefReq->field_name = $fieldname;
            $chefReq->value = $value;
            $chefReq->save();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接