これを実現する方法はいくつかあります。1つは、結果をグループ化してHAVING
を使用することです。 個別のタグの数を比較するには
$query = $this->Users
->find()
->matching('Tags', function ($query) {
return $query->where(['Tags.name IN' => ['Tag1', 'Tag2']]);
})
->group('Users.id')
->having([
$this->Users->query()->newExpr('COUNT(DISTINCT Tags.name) = 2')
]);
これにより、2つの異なるタグを持つユーザーのみが選択されます。タグはTag1
のみです。 およびTag2
参加しているのはこれらだけだからです。name
の場合 列は一意であるため、代わりに主キーを使用できます。
IN
ところで。基本的にOR
と同じです 条件(データベースシステムはIN
を展開します OR
へ それに応じた条件)。