Ada beberapa cara untuk mencapai ini, salah satunya adalah dengan mengelompokkan hasil dan menggunakan HAVING
untuk membandingkan jumlah tag yang berbeda
$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')
]);
Ini hanya akan memilih pengguna yang memiliki dua tag berbeda, yang hanya dapat berupa Tag1
dan Tag2
karena ini adalah satu-satunya yang bergabung. Jika name
kolom unik, Anda dapat mengandalkan kunci utama sebagai gantinya.
IN
Omong-omong. pada dasarnya sama dengan OR
. Anda kondisi (sistem database akan memperluas IN
ke OR
kondisi yang sesuai).