Laravel 7 - 如何将请求数组循环到控制器以使用 eloquent 附加数据

问题描述

请帮忙,所以我想使用 foreach 在我的控制器中使用 Eloquent 循环并将数据附加到数据库,我将解析后的数据作为数组传递:

array:3 [▼
  0 => "3"
  1 => "7"
  2 => "9"
]

我想循环 (foreach) 并使用 attach() 将其保存到表中,这样就可以像这样一次性使用相同的 ID 保存它:

Course_ID | Facilitator_Id
--------------------------
1         | 2
1         | 3
1         | 4
--------------------------

这是刀片:

<form method="POST" action="{{ '/courses' }}" enctype="multipart/form-data">
...
                            <div class="form-group row">
                            <label class="col-3" for="fasil_id">Fasilitator</label>
                            <div class="col-9">
                                <select class="form-control @error('fasil_id') is-invalid @enderror bootstrap-select" data-style="btn-white" multiple name="fasil_id[]" selected="{{ old('fasil_id') }}" required autocomplete="fasil_id">
                                 @foreach($facilitators as $data)
                                  <option value="{{$data->id}}">{{$data->nama}}</option>
                                 @endforeach
                                </select>
                                @error('fasil_id')
                                <span class="invalid-Feedback" role="alert">
                                    <strong>{{ $message }}</strong>
                                </span>
                                @enderror
                            </div>
                        </div>
...
</form>
  • 我在标记属性中使用了 name="fasil_id[]"

  • 目前我正在使用这种方法进行循环:

     foreach($request->fasil_id as $fasil_id) {
     Course::find($id)->facilitators()->attach([$fasil_id]); }
    

但是,遗憾的是我总是收到此错误

htmlspecialchars() expects parameter 1 to be string,array given

解决方法

在您的 <select> 开始标签中,您正在设置 selected="{{ old('fasil_id') }}"
但由于 fasil_id 是一个数组,因此无法将其设置为 selected 值,{{ }} 无法打印它。
尝试删除 selected="{{ old('fasil_id')

作为旁注: 您可以将数组传递给 attach() 方法,因此您无需在此处循环。 就这样做:

 Course::find($id)->facilitators()->attach($request->fasil_id);