Có một số cách để đạt được điều này, một là nhóm các kết quả và sử dụng HAVING
để so sánh số lượng các thẻ riêng biệt
$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')
]);
Thao tác này sẽ chỉ chọn những người dùng có hai thẻ riêng biệt, chỉ có thể là Tag1
và Tag2
vì đây là những cái duy nhất đang được tham gia. Trong trường hợp name
là duy nhất, bạn có thể dựa vào khóa chính để thay thế.
IN
btw. về cơ bản giống với OR
của bạn điều kiện (hệ thống cơ sở dữ liệu sẽ mở rộng IN
thành OR
điều kiện phù hợp).