我正在研究laravel多对多关系。我有两张桌子和一张透视表。表格结构如下:
表格研究:
-id
-name
-code
表位:
-id
-name
-type
透视表研究_站点:
-id
-study_id
-site_id
两个表的模型:
站点模型:
public function studies()
{
/** model, pivot_table, current table id in pivot table, relation table id in pivot table */
return $this->belongsToMany(Study::class, 'study_sites', 'site_id', 'study_id')->withPivot("study_site_id");
}
研究模型:
public function sites()
{
/** model, pivot_table, current table id in pivot table, relation table id in pivot table */
return $this->belongsToMany(Site::class, 'study_sites', 'study_id', 'site_id')->withPivot('study_site_id');
}
现在我想获得所有未分配给特定研究的站点(例如study_id,"!=",2(。在这方面,我使用了:
$sites = Site::query();
$sites = $sites->whereDoesntHave('studies', function($query) {
$query->where('study_id', '!=', 2);
})->get();
dd($sites);
我也应用了其他逻辑,但没有找到任何解决方案。如果有人在这方面指导我,我将不胜感激。
谢谢,
您可以使用内联关系存在性查询,如下所示:
$sites = Site::query()->whereRelation('studies', 'pivot.study_id', '!=', 2)->get();