2017-01-30 3 views
1

Ich versuche, eine HABTM Verbindung zwischen 2 Tabellen episodes und filters zu verwenden. Die Zuordnungstabelle lautet episodes_filters. Ich möchte alle Episoden finden, die beiden Filter-IDs 1 und 2 entsprechen. Mein Verständnis ist, dass CakePHP AND-Bedingungen standardmäßig ausführt, aber meine Bemühungen haben dazu geführt, Ergebnisse entweder mit Episode ID 1 oder 2 oder überhaupt keine Ergebnisse zurückgeben.CakePHP 2 HABTM mit AND Bedingungen finden

Hier ist, wo ich bisher mit dem Code gelandet:

$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' 
      ) 
     ) 
    ), 

)); 

Ich habe versucht, jeden Filter-ID zu machen in der JOIN es eigenen Zustand ist, anstatt wie es als ein Array zu tun: ‚EpisodesFilters.filter_id‘ => array (1,2), aber das führt dazu, dass Episoden mit Filtern 1 oder 2 zurückgegeben werden, nicht beides.

Kann mir jemand helfen zu bestimmen, wie diese Bedingung für die HABTM-Suche eingerichtet wird?

Antwort

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

oder ohne Schleife

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

Diese Lösung erzeugt das gleiche Ergebnis und gibt im Wesentlichen Episoden zurück, die eine Filter-ID von 1 oder 2 haben, nicht beides. –

0

zuerst Ihre AND Bedingungen Array machen, es ist ein neues Array für jedes der UND-Bedingungen getrennt von Ihrem $filterIds var machen:

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

Und dann würde Ihr Bedingungspunkt in Ihrem Suchbefehl sein:

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