laravel - 使用数据透视表从主表中获取数据
问题描述
我正在使用两个表和一个数据透视表
表 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);
}
非常感激你的帮助。
解决方案
我认为@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
模型中。
推荐阅读
- google-maps - 当我尝试搜索 AnimalClinics 时,Google Place API 未显示当前结果
- android - 创建 google API 客户端时 getContext 不起作用
- c++ - OpenGL 4.5 Shader - 我的输入缓冲区是否相互破坏?
- python - 无法将数据输入张量流图
- php - PhpSpreadsheet:SUMIF 公式不起作用
- php - 如何通过保持所有其他强制/可选参数(如果有)等于它们的默认值来仅将可选参数传递给 PHP 函数?
- ruby-on-rails - 访问在 Rails 中使用 migrate 创建的数据库表位置
- python-3.x - Docker 日志格式化
- php - curl 的输出为空
- xml - XSLT - 在 for-each 中更改 XPATH