Existuje několik způsobů, jak toho dosáhnout, jedním by bylo seskupit výsledky a použít HAVING
pro porovnání počtu různých značek
$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')
]);
Tím vyberete pouze ty uživatele, kteří mají dvě odlišné značky, které mohou být pouze Tag1
a Tag2
protože to jsou jediné, které se připojují. V případě name
je jedinečný, můžete místo toho počítat s primárním klíčem.
IN
Mimochodem. je v podstatě stejný jako váš OR
podmínek (databázový systém se rozbalí IN
na OR
odpovídajícím podmínkám).