如何通过关系船过滤laravel雄辩的结果



我有两个型号的TeamleaderCompany,它有很多TeamleaderCompanyTag

Teamleader公司

public function teamleaderCompanyTags()
{
return $this->hasMany('AppTeamleaderCompanyTag');
}

TeamleaderCompanyTag

public function teamleaderCompany()
{
return $this->belongsTo(TeamleaderCompany::class);
}

当我TeamleaderCompany::all()时,我得到以下结果:

(...)
"teamleader_company_tags": [
{
"id": 7,
"tag": "hot lead",
"teamleader_company_id": 3,
"created_at": "2019-09-03 09:23:51",
"updated_at": "2019-09-03 09:23:51"
},
{
"id": 8,
"tag": "reseller",
"teamleader_company_id": 3,
"created_at": "2019-09-03 09:23:51",
"updated_at": "2019-09-03 09:23:51"
}
]
(...)

我想做的是显示TeamleaderCompany结果,其中teamleaderCompanyTags只有一个tag,即'reseller'(如果除了"经销商"之外还有另一个标签,则不显示(

$companies->whereHas(
'teamleaderCompanyTags',
function ($query) use ($condition) {
$query->where('tag',
(...)
);
}
);

感谢

试试这个方法

TeamleaderCompany::with('teamleaderCompanyTags:id,tag')
->whereHas('teamleaderCompanyTags',function(IlluminateDatabaseEloquentBuilder $query){
$query->where('tag', "reseller");
})->get();

尝试此查询:

TeamleaderCompany::has('teamleaderCompanyTags', '=', 1)     // companies that have only one tag
->whereHas('teamleaderCompanyTags', function ($query) { // companies that have `reseller` tag
$query->where('tag', 'reseller');
})
->get()

您有两个条件。

  • 它需要有"经销商"标签
  • 这是它唯一的标签
TeamleaderCompany::whereHas('teamleaderCompanyTags', function ($query) {
$query->where('tag', 'reseller');
})
->whereDoesntHave('teamleaderCompanyTags', function ($query) {
$query->where('tag', '!=', 'reseller');
})
->get()

最新更新