我正在使用两个表和一个数据透视表
表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中的未知列'pivot' “ where子句”
这是关系:
public function calendar_groups()
{
return $this->belongsToMany(CalendarGroup::class);
}
非常感谢您的帮助。
答案 0 :(得分:0)
我认为@Tpojka就在这里。如果您尝试获取属于所需CalendarGroup的Calendar实例,则替换代码应如下所示:
$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
模型中。
答案 1 :(得分:0)
好,终于可以正常工作了。
我使用了您的建议,但还是有些理解。 当我使用提出的建议:
$event = new Calendar;
$event->orderBy('start', 'asc')
->whereHas('calendar_groups', function($q) {
$q->where('calendar_group_id', '=', '1');
})->with('calendar_groups')
->first();
我得到一个空的收藏集。
但是如果我运行这个:
$event = Calendar::orderBy('start', 'asc')
->whereHas('calendar_groups', function($q) {
$q->where('calendar_group_id', '=', '1');
})->with('calendar_groups')
->first();
我得到了预期的结果
有谁能够告诉我之间,我可以从中学到什么区别?