- 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
.
Если я вместо этого использую return $query->whereIn('time_slot_id',$time_slot_ids);
, запрос будет работать с событием и правильно вернет прикрепленные временные интервалы. Однако это, в свою очередь, приводит к появлению сообщения об ошибке на странице временных интервалов, которое гласит SQLSTATE[42S22]: Column not found: 1054 Unknown column 'time_slot_id' in 'where clause'
.
Мой полный блок кода;
/**
* 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 принадлежит многим пользователям.
Попытка создать индексный запрос, в котором будут возвращены только временные интервалы, прикрепленные к событиям группы аутентифицированного пользователя.
Я что-то не так делаю?
Вот полный список запросов, выполненных до того, как я получил первую ошибку;