如何为多个用户处理多个值存储?

时间:2018-01-05 02:25:21

标签: mysql laravel

这是我的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存储到列中的问题。如何在我的控制器中编写函数和查询以将数据存储到数据库中?

1 个答案:

答案 0 :(得分:0)

我假设您的关系表名称为item_assigned,其对应的型号名称为ItemAssigned。您可以通过一些简单的步骤解决问题。

首先,您可以使用user_id来检查现有记录,例如

$items = ItemAssigned::where('user_id',$your_user_id_you_want_to_insert_record_for)->first();

我假设您在此表中只有一个用户的条目记录。或者user_idvendor_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();

希望有所帮助:)