Laravel where 子句中的 Nova 列是 where 子句中的 ambiguous/Unknown 列
Laravel Nova Column in where clause is ambiguous/Unknown column in where clause
- Laravel版本:5.8
- 新星版本:2.0.0
- PHP版本:7.2.1
- 操作系统和版本:最大OSX10.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);
,则查询对事件有效,returns 附加的时隙正确。然而,这反过来会导致“时间段”页面上出现一条错误消息,该消息显示为 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 资源。
用户属于一个用户级别。
用户属于一个组。
用户属于许多事件。
用户属于多个时隙。
用户级别有很多用户。
组有很多用户。
群组有很多活动。
事件属于一个组。
事件属于许多用户。
事件属于多个时间段。
时间段属于许多事件。
时间段属于许多用户。
尝试创建一个索引查询,其中只返回附加到经过身份验证的用户组的事件的时间段。
我是不是做错了什么?
这是我遇到第一个错误之前执行的查询的完整列表;
一次查询多个 table 时,您必须为公共列名称指定 table 名称。所以在查询id的时候,用这个:
return $query->whereIn('time_slots.id',$time_slot_ids);
- Laravel版本:5.8
- 新星版本:2.0.0
- PHP版本:7.2.1
- 操作系统和版本:最大OSX10.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);
,则查询对事件有效,returns 附加的时隙正确。然而,这反过来会导致“时间段”页面上出现一条错误消息,该消息显示为 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 资源。
用户属于一个用户级别。 用户属于一个组。 用户属于许多事件。 用户属于多个时隙。
用户级别有很多用户。
组有很多用户。 群组有很多活动。
事件属于一个组。 事件属于许多用户。 事件属于多个时间段。
时间段属于许多事件。 时间段属于许多用户。
尝试创建一个索引查询,其中只返回附加到经过身份验证的用户组的事件的时间段。
我是不是做错了什么?
这是我遇到第一个错误之前执行的查询的完整列表;
一次查询多个 table 时,您必须为公共列名称指定 table 名称。所以在查询id的时候,用这个:
return $query->whereIn('time_slots.id',$time_slot_ids);