Eloquent 关系在哪里

Eloquent where on relationship

我有 3 个模型:

class User extends Authenticatable
{
   ...
    public function certifications()
    {
        return $this->belongsToMany('App\Certification', 'certification_user');
    }
    ...
}


class Certification extends Model {
    ...
    public function referential()
    {
        return $this->belongsTo('App\Referential');
    }
    ...
}

class Referential extends Model
{
    ...
    public function certifications()
    {
        return $this->hasMany('App\Certification');
    }
    ...
}

我正在尝试获取当前用户认证的所有引用。 我能做到:

App\User::with("certifications");

...然后迭代,但我宁愿有 CollectionReferential 个对象

我想我应该做类似的事情

App\Referential::whereHas("certifications", function($query){
   // something like "where certification in User::certifications()"
});

但我无法让它工作。

谢谢

您可以使用嵌套预加载:

$user = App\User::with('certifications.referential')->first();
$referentials = $user->certifications->pluck('referential');

whereHas() 查询如下所示:

App\Referential::whereHas('certifications.users', function($query) use($user) {
   $query->where('users.id', $user->id);
});