2017-01-30 14 views
1

2つのテーブルepisodesfiltersの間でHABTM関連付けを使用しようとしています。関連付けテーブルはepisodes_filtersです。 CakePHPはデフォルトでAND条件を実行しますが、私の努力の結果、エピソード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' 
      ) 
     ) 
    ), 

)); 

私はJOINをそれ自身の状態で各フィルタ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つのフィルタIDを持つエピソードを返します。 –

0

ずにまず、あなたの$filterIds VARから、ITと条件を別々のそれぞれについて、新しい配列作り、あなたのAND条件の配列を作る:

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

そして、findコマンドのあなたの条件項目は次のようになります:

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