如何限制 whereHas 只匹配 where 条件?

How to restrict whereHas to ONLY match where condition?

我在 Homestead 上使用 Laravel 6.0 和 PostgreSQL。

此查询返回的服务 至少有一个 post is_assistant = true:

Service::with('posts')
    ->whereHas('posts', function ($q) {
        $q->where('is_assistant', true);
    })
    ->get();

型号:

class Service extends Model
{
    public function posts()
    {
        return $this->belongsToMany('App\Post');
    }
}

class Post extends Model
{

    protected $casts = [
        'is_assistant' => 'boolean',
    ];

}

如何编写 Eloquent 查询以获取 只有 post 具有 is_assistant = true 的服务?

可以使用whereDoesntHave方法:

Service::with('posts')
    ->whereDoesntHave('posts', function ($q) {
        $q->where('is_assistant', false);
    })
    ->get();