一尘不染

如何使用 Eloquent 更新表中的所有记录?

php

解决方案

foreach($request->all() as $record){
    EventViews::query()->updateOrCreate(['id'=>$record['id']], $record);
}

问题

如何通过传递来更新整个表request arrayid如果不存在,它应该更新现有行并创建新行。如果可能的话,不必翻遍loop整个表。

无效的尝试:

EventViews::query()->updateOrCreate($request->all());

.

DB::transaction(function ($request) {
    foreach ($request->all() as $record) {
        EventViews::updateOrCreate($record);
    }
});

.

$model = new EventViews($request->all());
$model->fill($request->all())->save();

阅读 100

收藏
2022-07-23

共1个答案

一尘不染

假设您的请求有效负载看起来像

records[]=[id=1,name=foo,description=foo,c=1]&
records[]=[id=2,name=bar,description=bar,c=1]&
...

你可以像这样循环遍历它:

$input = $request->input('records');
foreach($input as $record){
    EventViews::query()->updateOrCreate(['id'=>$record['id']],$record);
}

如果您的请求如下所示:

1=[name=foo,description=foo,c=1]&
2=[name=bar,description=bar,c=1]&
...

其中参数名称是 id,那么您可以使用:

$input = $request->input();
foreach($input as $key => $record){
    EventViews::query()->updateOrCreate(['id'=>$key],$record);
}
2022-07-23