如何同时保存具有不同数量数据的多个数据?

时间:2019-11-01 06:40:40

标签: laravel

我有简历表,用户表和共享表。 份额表的结构 shareto_id,cv_id,user_id

可以有任意数量的shareto_id和cv_id。 假设我要保存(1)shareto_id和(2)cv_id。 但是它只在数据库中保存一个数据。 这些是我已经尝试过的代码。

$cv_id = explode(",",$cvids);
$shareto_id = explode(",",$sharetoids);
$cvlength = count($cv_id);
$sharetolength = count($shareto_id);
for($i=0; $i<$cvlength; $i++)
{
  for($j=0; $j<$sharetolength; $j++)
  {
     $data['cv_id'] = $cv_id[$i];
     $data['user_id'] = $request->user_id;
     $data['shareto_id']= $shareto_id[$j];
  }
}    
Share::create($data);

4 个答案:

答案 0 :(得分:1)

$data只是一个包含3个元素的数组。您将为该循环的每次迭代重新分配$data['cv_id']$data['user_id']$data['shareto_id'],以便先前的值消失。

您需要通过创建要添加到主集合的新元素数组来保持先前的值:

$data = [];

for (...) {
    for (...) {
        $data[] = [
            'cv_id' => $cv_id[$i],
            'user_id' => $request->user_id,
            'shareto_id' => $shareto_id[$j],
        ];
    }
}

Eloquent Builder上的create方法用于创建1个新模型实例,并保存很多。

如果要进行批量插入并部分绕过Eloquent,则可以使用查询生成器的insert方法。

Share::insert($data);

答案 1 :(得分:1)

如果我正确理解了您的问题,则应将create移入循环:

for ($i = 0; $i < $cvlength; $i++) {
    for ($j = 0; $j < $sharetolength; $j++) {
        $data['cv_id']      = $cv_id[$i];
        $data['user_id']    = $request->user_id;
        $data['shareto_id'] = $shareto_id[$j];
        Share::create($data);
    }
}

或按照此处所述使用insert

How to insert multiple rows from a single query using eloquent/fluent

答案 2 :(得分:0)

确保如下所示循环格式化数组中的数据

$data = array(
    array('cv_id'=> 2, 'user_id'=> 1, 'shareto_id'=> 4),
    array('cv_id'=> 5, 'user_id'=> 3, 'shareto_id'=> 9),
    //...
);

Model::insert($data);

因此,在您的情况下,代码应如下所示

$data = [];
for($i=0; $i<$cvlength; $i++)
{
  for($j=0; $j<$sharetolength; $j++)
  {
     $data[] = [
         'cv_id' => $cv_id[$i],
         'user_id' => $request->user_id,
         'shareto_id'=> $shareto_id[$j]
     ];
  }
}    
Share::insert($data);

答案 3 :(得分:0)

不要使用in循环插入新记录,我们可以像这样构建原始插入查询

insert into "Table_name" ('cv_id','user_id','shareto_id')VALUES (cv_id_value_1, user_id_value_1, shareto_id_1) (cv_id_value_2, user_id_value_2, shareto_id_2)`

只需一个查询即可批量插入