获取我从多个选择框中选择的所有ID并更新另一个表 - laravel

时间:2017-08-24 13:29:02

标签: php laravel laravel-5.4

我有一个表单,用户可以从选择框中选择多个标签。然后我需要创建货件,在我这样做之后,我需要从标签中获取用户选择的所有ID,并更新ID与用户选择的标签ID匹配的另一个表。

这是选择框:

<select name="bins[]" class="form-control" id="shipping_bin_labels_select" multiple="multiple">
     @foreach(\App\Bin::all() as $bin)
          <option value="{{ $bin->id }}"  {{ old('bins') }}>{{ $bin->label }}</option>
     @endforeach
</select>

以下是它的外观:

enter image description here

然后我创建了货物:

  public function store(Request $request)
    {
        $this->validate($request, [
            'truck'      => 'required',
            'bins'       => 'required',
            'stand_id'   => 'required',
        ]);

        $standName = request('stand_id');
        $standName = Stand::where('name', '=', $standName)->first();

        Shipment::create([
            'truck' => request('truck'),
            'stand_id' => $standName->id
        ])->save();

        ...........

之后,我需要遍历所有的bin标签,获取他们的ID并更新&#39; bins&#39;我刚刚制作的货件ID表。我不知道如何使用我刚刚选择的bin ID从bin表中获取所有bin。

这是我到目前为止所尝试的:

$bins = $request->input('bins');
$bins = implode(',', $bins);

// Tried this, but get empty collection. [$bins] (brackets) dont help either.
$bins = Bin::whereIn('id', $bins)->get();

// Tried this, but get "Call to a member function all() on string"
$bins = Bin::whereIn('id', $bins->all())->get();


// This is what I sort of need
$bins = Bin::whereIn('id', [3, 5, 6])->get();

供参考,当我DD这个:

$bins = $request->input('bins');
$bins = implode(',', $bins);
dd($bins);

我明白了:

enter image description here

这些是来自选择框的我的bin ID。不要担心长ID字符串,这就是我的ID格式化并存储在bin表格中。

2 个答案:

答案 0 :(得分:2)

WhereIn接受一个数组

->whereIn('id', [1, 2, 3])

如果删除了内爆,则可以将该数组传递给查询。

所以它会变成

->whereIn('id', $bins)

答案 1 :(得分:1)

你可以这样做:

$bins = Bin::whereIn('id', request('bins'))->get();

whereIn方法接受数组作为第二个参数look here