Laravel更新或创建

djp7away  于 2022-12-19  发布在  其他
关注(0)|答案(4)|浏览(240)

我尝试如果有记录就更新,如果没有记录就创建。问题是:
已记录病例:当数据库中已经有记录时,它会创建记录.

public function store(Request $request)
    {
        $time = $request->input('time');
        foreach ($request->input('number') as $key => $value) {
            Choice::UpdateOrCreate([
                'user_id' => Auth::id(),
                'time'  => $time,
                'topic_id' => $key,
                'question_number' => $value,
            ]);
        }
    }
olqngx59

olqngx591#

您必须向UpdateOrCreate传递两个参数,第一个是搜索记录的attributes,第二个是我们拥有的方法文档中的values
创建或更新与属性匹配的记录,并在其中填充值。
因此,如果只使用user_id搜索记录,则必须按如下方式执行:

public function store(Request $request)
{
    $time = $request->input('time');
    foreach ($request->input('number') as $key => $value) {
        Choice::UpdateOrCreate([
            'user_id' => Auth::id()
         ],
         [
            'time'  => $time,
            'topic_id' => $key,
            'question_number' => $value,
        ]);
    }
}
ykejflvf

ykejflvf2#

使用此方法:

$matchThese=array('user_id' => Auth::id())

    Choice::updateOrCreate($matchThese,['topic_id'=>$key,'question_number' => $value,'time' => $time]);
soat7uwm

soat7uwm3#

根据crud UpdateOrCreate 中的Rest Update,如果未找到匹配记录,则创建一条记录。因此,Choice::UpdateOrCreate的格式必须如下所示

Choice::updateOrCreate(['user_id' => Auth::id(),
                    'time'  => $time,], [
                    'topic_id' => $key,
                    'question_number' => $value,
                ])

其中['user_id' =〉Auth::id(),'time' =〉$time,]是检查记录是否存在。

hs1ihplo

hs1ihplo4#

尝试将循环中的代码替换为:

...
Choice::UpdateOrCreate(
    ['user_id' => Auth::id(), 'time' => $time],
    ['topic_id' => $key, 'question_number' => $value]
);
...

这将搜索用户在特定时间的记录,如果没有,则创建一个,但如果有,则将更新其topic_id和question_number。

相关问题