在 foreach 中保存许多模型太慢

问题描述 投票:0回答:1

我正在构建电子商务应用程序,在保存许多变体时我一直在努力解决这个问题:

据说,我收到了归还集合的请求:

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 中保存多个模型时如何以尽可能少的成本进行优化?

php jquery laravel
1个回答
0
投票

您正在为每次迭代插入数据,这可能需要一些时间来存储每个插入插入。首先,需要在单个数组中准备数据。然后在循环外插入数据。

$skuArray = []


foreach ($datas in $data) {    
      $sku = [
         'name' => $data['sku'],
         'price' => $data['price'],
         'quantity' => $data['quantity'],
      ];

     $skuArray[] = $sku;
}

SKU::insert($skuArray ); 
© www.soinside.com 2019 - 2024. All rights reserved.