Laravel,从select2中的数据库中获取选定的值

时间:2019-02-04 14:35:01

标签: php laravel jquery-select2

我试图将数据库中所有选定的值显示给多个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>

因此,当我选择该值时,它将显示三倍的重复值

enter image description here

2 个答案:

答案 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()));

我希望对您有帮助

相关问题