Laravel 7 мультиселект в отношениях один ко многим - PullRequest
0 голосов
/ 19 апреля 2020

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

У меня есть следующий код:

public function tag()
    {
        return $this->belongsToMany(Tag::class, 'tags_dashboard', 'dashboard_id', 'tag_id');
    }

Я хочу, чтобы выбранные значения были выбраны. Это не похоже на работу:

<select id="tags" name="tags[]" class="form-control" multiple>
        @foreach($tags as $tag)
          <option value="{{$tag->id}}" @foreach($tags as $dashboard->tag) {{ in_array($tag->id, $dashboard->tag) ? "selected" : null }} @endforeach>{{$tag->name}}</option>
        @endforeach
</select>

Это дает ошибку in_array() expects parameter 2 to be array, object given

1 Ответ

1 голос
/ 19 апреля 2020

У вас есть логика c, правильная там, это просто проблема синтаксиса / записи

Вместо:

in_array($tag->id, $dashboard->tag)

Использование:

in_array($tag->id, $dashboard->tag()->pluck("tags.id")->toArray())

Объяснение:

  • $tag->id возвращает идентификатор (int из базы данных)
  • , поскольку вы определили связь между панелью мониторинга и тегами ( с функцией assignToMany), вам просто нужно получить массив, который содержит все идентификаторы тегов переменной $dashboard
  • $dashboard->tag() возвращает отношение между $ dashboard и его тегами
  • $dashboard->tag()->pluck("tags.id") возвращает laravel объект коллекции, который содержит все идентификаторы тегов тегов $ dashboard
  • $dashboard->tag()->pluck("tags.id")->toArray(): последняя функция toArray преобразует laravel объект коллекции в php собственный массив
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...