首页 > 解决方案 > 使用数据透视表从主表中获取数据

问题描述

我正在使用两个表和一个数据透视表

表 1 命名calendars

表 2 命名calendar_groups

数据透视表calendar_calendar_group

我正在尝试根据数据透视表中的 where 值从表 1 中获取数据。然后在哪里calendar_groups_id = 1使用calendar_id从表 1 中获取数据。我无法让它工作。

$event = new Calendar();
$event->orderBy('start', 'asc')
    ->whereHas('calendar_groups', function ($q) {
        $q->wherePivot('calendar_groups_id', '=', '1');
    })->with('calendar_groups')
    ->first();

这给了我以下错误:

SQLSTATE [42S22]:未找到列:1054 'where 子句'中的未知列'pivot'

这是关系:

public function calendar_groups()
    {
        return $this->belongsToMany(CalendarGroup::class);
    }

非常感激你的帮助。

标签: laravellaravel-5eloquent

解决方案


我认为@Tpojka 就在这里。如果您尝试获取属于所需 CalendarGroup 的日历实例,则替换代码应如下所示:

$event = new Calendar();
$group = 1;
$event->orderBy('start', 'asc')
    ->whereHas('calendar_groups', function ($q) use ($group) {
        //$q->wherePivot('calendar_groups_id', '=', $group);
        $q->where('id', '=', $group);
    })->with('calendar_groups')
    ->first();

如果我正确阅读了文档,wherePivot()应该像这样使用:

$event = new Calendar();
$event->calendar_groups()->wherePivot('some_pivot_column',1)->get();

但这会返回您的CalendarGroup实例。

如果您想通过 Eloquent 完成此操作,但又不想一直这样做,CalendarGroup那么您可能需要CalendarCalendarGroupPivot为数据透视表创建一个模型(我们称之为模型)并将另一个关系 ( hasMany('CalendarCalendarGroupPivot')) 添加到您的Calendar模型中。


推荐阅读