Laravel批量插入具有相同形式的许多条目

时间:2018-03-18 13:00:15

标签: php arrays laravel laravel-5.5 bulkinsert

我的目标是使用相同的表单同时插入许多记录。我已经在表单元素中创建了一个函数,它将复制所有字段并使用一个提交按钮传递所有数据。因此视图和传递给控制器​​的数据没有问题。

我有一个数组:

array:8 [▼
  "_token" => "XLQVP4Hbm85SlZDFa6OnjK0LCoMOsrfs8jGCUwMj"
  "id" => null
  "client_id" => array:2 [▼
    0 => "1"
    1 => "1"
  ]
  "sample_code" => array:2 [▼
    0 => "sadasdas"
    1 => "qwewqewqeqweq"
  ]
  "sample_description" => array:2 [▼
    0 => "dasdsad"
    1 => "dsadsadasd"
  ]
  "quantity" => array:2 [▶]
  "analysis_requested" => array:2 [▼
    0 => "dasdsadasd"
    1 => "dsadsadas"
  ]
  "special_instruction" => array:2 [▼
    0 => "asdadasda"
    1 => "asdasdaada"
  ]
]

上面给出的数组只是我从表单中传递的示例数据。这可能是3,4等等取决于用户输入。

如何使用批量插入插入此查询?

所以这是控制器中的代码。

data = array(
        array(
            'client_id' => $input['client_id'][0],
            'sample_code' => $input['sample_code'][0],
            'sample_description' => $input['sample_description'][0],
            'quantity' => $input['quantity'][0],
            'analysis_requested' => $input['analysis_requested'][0],
            'special_instruction' => $input['special_instruction'][0],
            'status' => 'for_testing',
            'created_at' => $date_today,
            'updated_at' => $date_today,
        ),
        array(
            'client_id' => $input['client_id'][1],
            'sample_code' => $input['sample_code'][1],
            'sample_description' => $input['sample_description'][1],
            'quantity' => $input['quantity'][1],
            'analysis_requested' => $input['analysis_requested'][1],
            'special_instruction' => $input['special_instruction'][1],
            'status' => 'for_testing',
            'created_at' => $date_today,
            'updated_at' => $date_today,
        ),
    );

    AnalysisRequest::insert($data);

如何通过使用每个循环来简化此代码?以及如何获取我插入的每个数据的最后一个ID。

感谢有人可以提供帮助。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我仍然认为你在做什么有什么问题,但这可能是一个解决方案,虽然我不认为这是最好的选择

正如我已经告诉过你的那样,你应该按照以下方式接收数据

foreach($data as $item) { AnalysisRequest::create($item); }

这样你可以做到

$newCollection = collect($input);
$datas = $collection->except(['_token', 'id']);

$items = [];
foreach($datas->all() as $field => $data) { // $field is field name
  foreach($data as $key => $value) { // $key is item key
    $item[$key][$field] = $value;
  }
}
 foreach($items as $item) { AnalysisRequest::create($item); }

但是,如果你坚持以自己的方式做事,你有很多方法就是一个

DWORD

我建议您观看此视频https://www.youtube.com/watch?v=Efr7SUrBUQw并重构您的表单以正确的方式获取数据