2017-01-30 16 views
1

Я пытаюсь использовать связь HABTM между 2 таблицами episodes и filters. Таблица ассоциации - episodes_filters. Я хочу найти все эпизоды, которые соответствуют идентификаторам фильтров 1 и 2. Я понимаю, что CakePHP делает И условия по умолчанию, но мои усилия привели к возврату результатов, соответствующих либо эпизоду id 1 или 2, либо вообще никаких результатов.Cakephp 2 HABTM найти с AND условия

Вот где я приземлился до сих пор с кодом:

$filterConditions = array(); 
foreach($filterIds as $filterId) { 
    $filterConditions[] = array('EpisodesFilters.filter_id' => $filterId); 
} 

$episodeFilters = $this->Episode->find('all', array(
    'conditions' => array(
     'Episode.organization_id' => $this->Auth->user('organization_id'), 
     'Episode.status' => $this->request->query['episode_status'] 
    ), 
    'joins' => array(
     array('table' => 'episodes_filters', 
      'alias' => 'EpisodesFilters', 
      'type' => 'INNER', 
      'conditions' => array(
       $filterConditions, 
       'EpisodesFilters.episode_id = Episode.id' 
      ) 
     ) 
    ), 

)); 

Я попытался сделать каждый идентификатор фильтра в РЕГИСТРИРУЙТЕСЬ это собственное состояние вместо того, чтобы делать это как массив, как: «» EpisodesFilters.filter_id => array (1,2), но это приводит к возвращению эпизодов с фильтрами 1 или 2, а не к обоим.

Может ли кто-нибудь помочь мне определить, как настроить это условие для поиска HABTM?

ответ

0
foreach($filterIds as $filterId) { 
    $filterConditions['and']['EpisodesFilters.filter_id'][] = $filterId; 
} 

ИЛИ без петли

$filterConditions['and']['EpisodesFilters.filter_id'] = $filterIds; 
+0

Это решение дает тот же результат, по существу возвращающий эпизоды с идентификатором фильтра 1 или 2, а не оба. –

0

Сначала сделайте ваш AND условия массива, что делает его новый массив для каждого из и условий отдельно от вашего $filterIds вар:

foreach($filterIds as $filter_id) { 
    $filterConditions['AND'][] = array('EpidodesFilters.filter_id' => $filter_id); 
} 

И тогда ваш пункт условий в вашей команде поиска будет:

'conditions' => array(
    'AND' => $filterConditions 
) 

 Смежные вопросы

  • Нет связанных вопросов^_^