这是我的html表
Checkbox | Name
Checkbox | abc
Checkbox | efg
Checkbox | xyz
-
//checkbox is an array
<td><input type="checkbox" name="id_franchise[]" value="{{ $item->id_franchise}}"></td>
//POST data
array:3 [▼
0 => "11"
1 => "53"
2 => "10"
]
E.g。特许经营权id 11和53属于用户ID 100,而特许经营权id 10属于用户ID 200.
我的数据库
user_id | franchise_id
100 | 11
100 | 53
100 | 54
100 | 56
200 | 10
200 | 15
在我的数据库中,我希望它存储在另一个表列名称item_assigned as
中id | user_id | vendor_id | franchise_assigned
1 | 100 | 1 | 11,53
2 | 200 | 2 | 10
当用户单击“提交”以存储数据时,它将通过循环检查特许经营权ID是否存在特许经营权ID,以比较现有数据和已提交数据。
我遇到了将基于用户的franchies存储到列中的问题。如何在我的控制器中编写函数和查询以将数据存储到数据库中?
答案 0 :(得分:0)
我假设您的关系表名称为item_assigned
,其对应的型号名称为ItemAssigned
。您可以通过一些简单的步骤解决问题。
首先,您可以使用user_id
来检查现有记录,例如
$items = ItemAssigned::where('user_id',$your_user_id_you_want_to_insert_record_for)->first();
我假设您在此表中只有一个用户的条目记录。或者user_id
和vendor_id
的另外一个条目记录合并。如果以后是这种情况,那么你可以做点什么 -
$items = ItemAssigned::where('user_id',$user_id)->where('vendor_id',$vendor_id)->first();
现在您要通过检查它是否已存在来存储francise_id
。要做到这一点,你需要抓住franchise_assigned
并解析它并检查如下 -
if($items!=null){
$franchise_assigned = $items->franchise_assigned;
$ar = (explode(",",$franchise_assigned));
$ar = array_replace($ar,array_fill_keys(array_keys($ar, $francise_id_to_check), $francise_id_to_be_replaced_by));
}
}
如果需要删除旧值并添加新值,则创建一个新数组并追加每个非旧值的值。之后添加新值。
$new_ar = array();
$count = 0;
foreach($ar as $a){
if($a!=$old_francise_value)
$new_ar[$count++] = $a;
}
$new_ar[$count++] = $new_francise_value;
最后用逗号分隔值再次合并 -
$franchise_assigned_new = implode(",",$ar);
并更新它 -
$items->franchise_assigned = $franchise_assigned_new;
$items->save();
希望有所帮助:)