Има няколко начина да постигнете това, единият е да групирате резултатите и да използвате HAVING
за да сравните броя на отделните тагове
$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')
]);
Това ще избере само онези потребители, които имат два различни маркера, които могат да бъдат само Tag1
и Tag2
тъй като те са единствените, които се присъединяват. В случай, че name
колоната е уникална, вместо това можете да разчитате на първичния ключ.
IN
между другото по същество е същото като вашето OR
условия (системата на базата данни ще се разшири IN
до OR
условия съответно).