Er zijn een paar manieren om dit te bereiken, een zou zijn om de resultaten te groeperen en HAVING
. te gebruiken om het aantal verschillende tags te vergelijken
$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')
]);
Hiermee worden alleen die gebruikers geselecteerd die twee verschillende tags hebben, die alleen Tag1
. kunnen zijn en Tag2
aangezien dit de enige zijn waaraan wordt deelgenomen. In het geval dat de name
kolom uniek is, kunt u in plaats daarvan op de primaire sleutel rekenen.
De IN
btw. is in wezen hetzelfde als uw OR
voorwaarden (het databasesysteem breidt uit IN
naar OR
voorwaarden dienovereenkomstig).