Der er et par måder at opnå dette på, en ville være at gruppere resultaterne og bruge HAVING
for at sammenligne antallet af de forskellige tags
$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')
]);
Dette vil kun vælge de brugere, der har to forskellige tags, som kun kan være Tag1
og Tag2
da disse er de eneste, der bliver tilsluttet. I tilfælde af name
kolonnen er unik, kan du regne med den primære nøgle i stedet.
IN
btw. er stort set det samme som din OR
betingelser (databasesystemet udvider IN
til OR
betingelser i overensstemmelse hermed).