У нас есть простая модель Company. В каждой компании может быть один или несколько отделов Dept. Каждый отдел относится к определенному типу Type.
Теперь нам нужен запрос, в котором возвращаются все компании, у которых есть отдел типа X и хотя бы один типа Y (т.е. каждая возвращаемая компания имеет два или более отдела, хотя бы один X и один Y ).
Как это можно сделать с помощью запроса?
Этот запрос не дает результатов, если getTypes возвращает более одного типа.
if (count($types = $demand->getTypes()) > 0) {
foreach ($types as $type)
$constraints[] = $query->contains('dept.type', $type);
}
$result = $query->matching($query->logicalAnd($query->logicalAnd($constraints)))->execute();
Этот запрос возвращает результаты для типа X или Y.
if (count($types = $demand->getTypes()) > 0) {
$constraints[] = $query->in('dept.type', $types);
}
Таблицы выглядят так (упрощенно):
CREATE TABLE IF NOT EXISTS `company` (
`uid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) NOT NULL,
PRIMARY KEY (`uid`)
);
CREATE TABLE IF NOT EXISTS `dept` (
`uid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) NOT NULL,
`company` int(10) unsigned NOT NULL,
`type` int(10) unsigned NOT NULL,
PRIMARY KEY (`uid`)
);
CREATE TABLE IF NOT EXISTS `type` (
`uid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) NOT NULL,
PRIMARY KEY (`uid`)
);