Laravel, получить выбранные значения из базы данных в select2 - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь показать все выбранные значения из базы данных для нескольких select2.То, когда я хочу добавить другие события, я могу добавить их.

Offer tables:
id:1
title: event1
events: 17,6,8

В столбце событий есть идентификатор всех выбранных событий..

Вот что я делаю:

public function edit($id)
    {
        $offer=Offers::find($id);
         $events=Events::all();

        $explode=  explode(',', $offer->events);


        return view('edit',['offer'=>$offer,'events'=>$events,'explode'=>$explode]);
    }

Blade:

<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 голосов
/ 04 февраля 2019

Вы загружаете все события базы данных в переменную $events, а не события, связанные с предложением.Вы должны сделать что-то вроде этого:

$events = Event::find(explode(',', Offer::find($id)->events));

Сказав это, было бы лучше использовать отношения для этого вместо ручной установки идентификаторов https://laravel.com/docs/5.7/eloquent-relationships

0 голосов
/ 04 февраля 2019

Может быть, когда вы получаете события, вы дублируетесь, попробуйте это:

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

Надеюсь, это поможет

...