Laravel Nova Столбец в предложении where является неоднозначным / Неизвестный столбец в предложении where - PullRequest
0 голосов
/ 12 апреля 2019
  • Laravel Версия: 5.8
  • Новая версия: 2.0.0
  • Версия PHP: 7.2.1
  • Операционная система и версия: Max OSX 10.13.6
  • Тип и версия браузера: Firefox 66.0.3

Описание:

Привет, у меня есть 2 модели, относящиеся к этой ошибке; Событие и временной интервал. Они имеют отношения BelongsToMany друг с другом.

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

Проблема в том, что если я использую return $query->whereIn('id',$time_slot_ids);, я получаю сообщение о записи в событии, которое гласит SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous.

Screen Shot 2019-04-12 at 13 47 09

Если я вместо этого использую return $query->whereIn('time_slot_id',$time_slot_ids);, запрос будет работать с событием и правильно вернет прикрепленные временные интервалы. Однако это, в свою очередь, приводит к появлению сообщения об ошибке на странице временных интервалов, которое гласит SQLSTATE[42S22]: Column not found: 1054 Unknown column 'time_slot_id' in 'where clause'.

Screen Shot 2019-04-12 at 13 47 49

Мой полный блок кода;

/**
     * Build an "index" query for the given resource.
     *
     * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
     * @param  \Illuminate\Database\Eloquent\Builder  $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public static function indexQuery(NovaRequest $request, $query)
    {

        if(auth()->user()->userLevel->level == 'Group') {

            $time_slot_ids = [];

            foreach(auth()->user()->group->events as $event) {

                foreach($event->timeSlots as $timeSlot) {

                    $time_slot_ids[] = $timeSlot->id;

                }

            }

            return $query->whereIn('time_slot_id',$time_slot_ids);

        }

    }

Шаги для воспроизведения:

Создание модели User, UserLevel, Group, Event и Time Slot и сопутствующего ресурса Nova.

Пользователь относится к уровню пользователя. Пользователь принадлежит к группе. Пользователь принадлежит ко многим событиям. Пользователь принадлежит ко многим временным слотам.

Уровень пользователя имеет много пользователей.

В группе много пользователей. В группе много событий.

Событие принадлежит группе. Событие принадлежит многим пользователям. Событие принадлежит многим временным слотам.

Слот времени принадлежит многим событиям. Time Slot принадлежит многим пользователям.

Попытка создать индексный запрос, в котором будут возвращены только временные интервалы, прикрепленные к событиям группы аутентифицированного пользователя.

Я что-то не так делаю?

Вот полный список запросов, выполненных до того, как я получил первую ошибку;

Laravel Nova Queries

1 Ответ

1 голос
/ 12 апреля 2019

При запросе нескольких таблиц одновременно, вы должны указать имена таблиц для общих имен столбцов. Поэтому при запросе идентификатора используйте это:

return $query->whereIn('time_slots.id',$time_slot_ids);
...