Laravel Nova列中where子句不明确/ where子句中的未知列

时间:2019-04-12 12:58:30

标签: php laravel laravel-nova laravel-5.8

  • Laravel版本:5.8
  • Nova版本: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

enter image description here

如果我改用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 09

我的完整代码块;

/**
     * 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资源。

用户属于用户级别。 用户属于一个组。 用户属于许多事件。 用户属于多个时隙。

用户级别有许多用户。

组有许多用户。 小组有很多活动。

事件属于一个组。 事件属于许多用户。 事件属于许多时隙。

时隙属于许多事件。 时隙属于许多用户。

尝试创建索引查询,其中仅返回附加到已验证用户组事件的时隙。

我做错什么了吗?

这是在我遇到第一个错误之前执行的查询的完整列表;

Screen Shot 2019-04-12 at 13 47 49

1 个答案:

答案 0 :(得分:1)

一次查询多个表时,必须为公用列名指定表名。因此,在查询ID时,请使用以下代码:

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