Laravel where 子句中的 Nova 列是 where 子句中的 ambiguous/Unknown 列

Laravel Nova Column in where clause is ambiguous/Unknown column in where clause

描述:

你好,我有 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);