Cakephp Найти все ГДЕ в двух категориях

У меня проблемы с поиском предметов, которые относятся к двум или более категориям в 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));

Есть идеи?

Заранее спасибо!!

0

Решение

Ты можешь использовать IN оператор:

$options['conditions'] = array('Categorie.id IN' => $kategories);

Или в том случае, если вы всегда хотите искать эти две категории, используйте AND:

$options['conditions'] = array('AND' => array(
array('Categorie.id' => $kategories[0]),
array('Categorie.id' => $kategories[1])
));
1

Другие решения

Попробуй это:

$kategories = array(1,2);
$kategories = implode(',',$kategories );


$options['conditions'] = array('Categorie.id in ( ' . $kategories . ' )') ;
$items = $this->Item->find('all',$options);
0

Я посмотрел немного дальше и нашел решение:

Чтобы найти все элементы, которые принадлежат 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);
0
По вопросам рекламы [email protected]