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

时间:2020-03-06 13:20:56

标签: laravel eloquent

我有两个模型TeamleaderCompany,其中:有很多TeamleaderCompanyTag

TeamleaderCompany

public function teamleaderCompanyTags()
{
    return $this->hasMany('App\TeamleaderCompanyTag');
}

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的{​​{1}}(如果除“转售商”以外还有另一个标签不显示)

'reseller'

谢谢

3 个答案:

答案 0 :(得分:1)

尝试此查询:

paintings:  [ { type: String} ]

答案 1 :(得分:1)

尝试此方法

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

答案 2 :(得分:0)

您有两个条件。

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