我有两个型号的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()