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

如何通过关系过滤laravel雄辩的结果?,laravel,eloquent,Laravel,Eloquent,我有两种型号TeamleaderCompany,其中:有许多TeamleaderCompanyTag 团队领导公司 public function teamleaderCompanyTags() { return $this->hasMany('App\TeamleaderCompanyTag'); } 团队领导公司标签 public function teamleaderCompany() { return $this->belongsTo(Teamleader

我有两种型号
TeamleaderCompany
,其中:有许多
TeamleaderCompanyTag

团队领导公司

public function teamleaderCompanyTags()
{
    return $this->hasMany('App\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
只有一个
标签,即
“分销商”
(如果除“分销商”外还有其他标签,则不显示)

谢谢

尝试以下查询:

TeamleaderCompany::has('teamleaderCompanyTags','=',1)//只有一个标签的公司
->whereHas('teamleaderCompanyTags',function($query){//有'reseller'标签的公司
$query->where('tag','reseller');
})
->得到()
尝试此查询:

TeamleaderCompany::has('teamleaderCompanyTags','=',1)//只有一个标签的公司
->whereHas('teamleaderCompanyTags',function($query){//有'reseller'标签的公司
$query->where('tag','reseller');
})
->得到()
试试这个方法

TeamleaderCompany::with('teamleaderCompanyTags:id,tag')
->whereHas('teamleaderCompanyTags',function(\Illuminate\Database\Eloquent\Builder $query){
                        $query->where('tag', "reseller");
                    })->get();
试试这个方法

TeamleaderCompany::with('teamleaderCompanyTags:id,tag')
->whereHas('teamleaderCompanyTags',function(\Illuminate\Database\Eloquent\Builder $query){
                        $query->where('tag', "reseller");
                    })->get();

你有两个条件

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

您有两个条件

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

谢谢,但如果有其他标签,则返回“teamleaderCompanyTags”的“经销商”事件。我要找的只是“经销商”而不是其他标签。@MostafaAbdellaoui您是指只有一个标签且该标签是“经销商”的公司,对吗?检查我的更新答案。谢谢,但如果有其他标签,这会返回“teamleaderCompanyTags”的“经销商”事件。我要找的只是“经销商”而不是其他标签。@Mostafaabdelloui你是说只有一个标签的公司,而该标签是“经销商”对吗?检查我的最新答案。