如果只有一个字段作为数组提供,Laravel / Eloquent是否提供了通过一次调用创建多个记录的方法?
例如,我收到$ request请求下面的数据,但只有propIds会爆炸并作为数组提供,所有其他值对于所有新记录都是相同的。
{"_token": "kEKmrPzu4nCk35xJAMOgdl0kNdwUZvpECsBl91dH",
"propIds": "126,129,71,82,77,64,69",
"rate": "4",
"cost": "55"
}
我可以做一个foreach并构建一个数组,然后运行Model::insert($newArray);
但是,如果只有一个字段作为数组提供,Laravel可能会提供解决方案。感谢。
现在我只是使用foreach循环来创建数组,然后调用Model::insert($newArray);
使用Model::insert($newArray);
插入多个记录不会自动添加created_at和updated_at日期。我在数据库中添加了一个时间戳作为默认值。
答案 0 :(得分:0)
是的,这是可能的。您需要使用insert()
并使用以下格式创建一个新数组:
Model::insert([
['prop_id' => 126, 'rate' => 4, 'cost' => 55],
['prop_id' => 129, 'rate' => 4, 'cost' => 55],
['prop_id' => 71, 'rate' => 4, 'cost' => 55],
]);
insert()
只会创建一个数据库查询。
答案 1 :(得分:0)
您可以覆盖Laravel Models create
功能,如下所示:
<强>模型强>
namespace App\Models;
class YourModel extends BaseModel
{
protected $fillable = [
"_token", "propId", "rate", "cost"
];
// override
public static function create(array $attributes = [])
{
$propIds = array_explode(',', $attributes['propIds']);
foreach ($propIds as $key => $value) {
$model = new static([
"_token" => $attributes['_token'],
"propId" => $value,
"rate" => $attributes['rate'],
"cost" => $attributes['cost']
]);
$model->save();
}
}
}
<强>控制器强>
YourModel::create([
"_token" => $request->input('_token'),
"propIds" => $request->input('propIds'), // "126,129,71,82,77,64,69"
"rate" => $request->input('rate'),
"cost" => $request->input('cost'),
]);