根据条件排除关系数据



我正在研究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();

最新更新