我试图将数据库中所有选定的值显示给多个select2。因此,当我想添加其他事件时,可以添加它们。
Offer tables:
id:1
title: event1
events: 17,6,8
列事件具有选中的所有事件的ID。
这就是我的工作
public function edit($id)
{
$offer=Offers::find($id);
$events=Events::all();
$explode= explode(',', $offer->events);
return view('edit',['offer'=>$offer,'events'=>$events,'explode'=>$explode]);
}
刀片:
<div class="form-group m-form__group row">
<label class="col-xl-3 col-lg-3 col-form-label">****</label>
<div class="col-xl-9 col-lg-9">
<select class="form-control m-select2" id="m_select2_3" name="events[]" multiple="multiple">
<optgroup label="Events">
@foreach($events as $event)
@foreach($explode as $item)
<option value="{{$event->id}}" {{ $item == $event->id ? 'selected="selected"' : ''}}>{{$event->title}}</option>
@endforeach
@endforeach
</optgroup>
</select>
</div>
</div>
因此,当我选择该值时,它将显示三倍的重复值
答案 0 :(得分:1)
您要在$events
变量中加载所有数据库事件,而不是与商品关联的事件。您应该这样做:
$events = Event::find(explode(',', Offer::find($id)->events));
话虽如此,最好是使用关系,而不是手动设置ID https://laravel.com/docs/5.7/eloquent-relationships
答案 1 :(得分:0)
也许当您收到事件时,您会变得重复,请尝试以下操作:
public function edit($id)
{
$offer=Offers::find($id);
$events=Events::all();
$explode = array_values(array_unique(explode(',', $offer->events)));
return view('edit',['offer'=>$offer,'events'=>$events,'explode'=>$explode]);
}
但是,在这种情况下,您应该知道商品表首先没有重复的事件,因此您可能要更改保存事件的脚本,以便商品删除重复的条目。
此外,我也不知道您的“事件”表是否也包含重复的事件。请检查并从“事件”表中删除所有重复的值,如果不能再使用相同的代码,就像在控制器中那样:
$events = array_values(array_unique(Events::all()->toArray()));
我希望对您有帮助