我正在构建电子商务应用程序,在保存许多变体时我一直在努力解决这个问题:
据说,我收到了归还集合的请求:
let data = {
"_token" :"{{ csrf_token() }}",
"data" : tableToJson($(".fixed-table table"), $(".scroll-table table")), // return data
}
let res = $.post(url, data);
结果会是这样的(在这种情况下,我使用带有 2 个最大选项的变体):
data = {
{
color: black,
size: 10,
sku: abxc,
quantity: 1,
price: 100$,
},
{
color: blue,
size: 10,
sku: abxz,
quantity: 2,
price: 1100$,
},
,....}
我打算在控制器中插入以下功能:
function insertVariant(Request $request) {
$datas = $request->all();
$id = options->insertGetId(
[
'name'=>'$data['color'] ,
]
,
[
'name'=>'$data['size'] ,
]
]);
foreach ($datas in $data) {
$options = new Options();
$sku = new SKU();
$sku['name'] = $data['sku'],
$sku['price'] = $data['price'],
$sku['quantity'] = $data['quatity']
$sku->save();
$variant_value = new VariantValue();
$variant_value['variant_options_id'] = $id[0];
$variant_value['value'] = $data['color'];
$variant_value['value'] = $data['size'];
$variant_value->save();
$sku_variant_value = new SKUVariantValues();
$sku_variant_value['variant_value_id'] = $variant_value->id;
$sku_variant_value['sku_id'] = $sku->id;
$sku_variant_value->save();
}
}
我看到该请求返回时间太长,好像它成功了?
在 foreach 中保存多个模型时如何以尽可能少的成本进行优化?
您正在为每次迭代插入数据,这可能需要一些时间来存储每个插入插入。首先,需要在单个数组中准备数据。然后在循环外插入数据。
$skuArray = []
foreach ($datas in $data) {
$sku = [
'name' => $data['sku'],
'price' => $data['price'],
'quantity' => $data['quantity'],
];
$skuArray[] = $sku;
}
SKU::insert($skuArray );