У меня проблемы с поиском предметов, которые относятся к двум или более категориям в cakephp 2
,
В моем контроллере у меня есть следующее:
$kategories = array(1,2);
$options['conditions'] = array('Categorie.id' => $kategories);
$items = $this->Item->find('all',$options);
Приведенный выше запрос показывает все элементы, имеющие связанный идентификатор категории 1 или 2.
Как я могу искать все предметы, которые принадлежат category.id 1
А ТАКЖЕ 2
(не ИЛИ).
Я попытался использовать массив ‘AND’ безуспешно:
$options['conditions'] = array('AND' => array('Categorie.id' => $kategories));
Есть идеи?
Заранее спасибо!!
Ты можешь использовать IN
оператор:
$options['conditions'] = array('Categorie.id IN' => $kategories);
Или в том случае, если вы всегда хотите искать эти две категории, используйте AND
:
$options['conditions'] = array('AND' => array(
array('Categorie.id' => $kategories[0]),
array('Categorie.id' => $kategories[1])
));
Попробуй это:
$kategories = array(1,2);
$kategories = implode(',',$kategories );
$options['conditions'] = array('Categorie.id in ( ' . $kategories . ' )') ;
$items = $this->Item->find('all',$options);
Я посмотрел немного дальше и нашел решение:
Чтобы найти все элементы, которые принадлежат category.id 1 И 2 (не ИЛИ), мне просто нужно было добавить параметр ‘group’ к моей находке, например так:
$options['group'] = array('Item.id HAVING COUNT(DISTINCT Categorie.id) > 1');
Полный запрос (рабочий):
$kategories = array(1,2);
$options['conditions'] = array('Categorie.id' => $kategories);
$options['group'] = array('Item.id HAVING COUNT(DISTINCT Categorie.id) > 1');
$items = $this->Item->find('all',$options);