我有简历表,用户表和共享表。 份额表的结构 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);
答案 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)`
只需一个查询即可批量插入