嗨,我有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);
}
}
创建用户,用户级别,组,事件和时隙模型以及随附的Nova资源。
用户属于用户级别。 用户属于一个组。 用户属于许多事件。 用户属于多个时隙。
用户级别有许多用户。
组有许多用户。 小组有很多活动。
事件属于一个组。 事件属于许多用户。 事件属于许多时隙。
时隙属于许多事件。 时隙属于许多用户。
尝试创建索引查询,其中仅返回附加到已验证用户组事件的时隙。
我做错什么了吗?
这是在我遇到第一个错误之前执行的查询的完整列表;
答案 0 :(得分:1)
一次查询多个表时,必须为公用列名指定表名。因此,在查询ID时,请使用以下代码:
return $query->whereIn('time_slots.id',$time_slot_ids);