Laravel 多对多关系搜索

Laravel many to many relation search

我现在有三个模型

用户

public function languages(){
    return $this->belongsToMany('App\Language');
}

报纸

public function languages(){
    return $this->belongsToMany('App\Language');
}

语言

public function users(){
    return $this->belongsToMany('App\User');
}

public function newspapers(){
    return $this->belongsToMany('App\Newspaper');
}

我已经有了language_user,language_newspapertable

并且在 tinker 中,我已经通过 attach() blablabla 成功地检索了这两个关系。

问题是 我如何搜索 Newspaper that User id1 在 eloquent 中有这个 Language?对我来说似乎很复杂。

User id1 -> has language en, zh

Newspaper id1 -> has language en, jp ->确定

Newspaper id2 -> has language zh -> 不正常

我已经试过了,但不确定是否正确

$where = [];

foreach ($agent->languages as $language) {
array_push($where, $language->id);}

$newspapers = Newspaper::
join('language_newspaper', function ($join) use ($where) {
    $join->on('newspaper.id', '=', 
        'langauge_newspaper.newspaper_id')
        ->whereIn('langauge_newspaper.newspaper_id', $where);
})
->groupBy('newspaper.id')
->get();

您应该可以在这种情况下使用 whereHas,如下所示:

$newspapers = Newspaper::whereHas('languages', function ($q) use ($agent) {
                 $q->whereIn('id', $agent->languages->lists('id)->all());
              })->get();