Der Aufbau bedingte Anweisung über mehrere Modelle (CakePHP 1.2.5)
Frage
Lassen Sie uns sagen, ich habe drei Modelle:. Benutzer, Region, Land
User belongsTo Region
Region belongsTo Country
Jedes dieser Modelle wird mit dem Contain Verhalten. Ich versuche, Benutzer aus dem Land mit dem Code ‚US‘ zu finden. Hier ist, was ich bin versucht:
$users = $this->User->find('all', array(
'conditions' => array('Country.code' => 'US'),
'contain' => array('Region.Country'),
));
CakePHP trennt diese in zwei Abfragen:
- Erstens, es ist die Auswahl der IDs für alle Länder mit Code ‚US‘.
- Dann wird diese IDs mit allen Benutzern Regionen SELECT Joining wo
region.country_id
in dieser Liste von zuvor abgerufenen Land IDs ist.
Als Ergebnis habe ich am Ende mit SQL-Fehler in meiner app, da mein conditions
Array einen Verweis auf Country.code enthält, und die zweite Abfrage, die Kuchen baut nicht JOIN Ländern.
Die beste Kuchen Lösung, die ich sehe, ist eine Unterabfrage zu bauen, wie in der
Lösung Nate Abele (ehemaliger Lead Entwickler von CakePHP) schrieb einen Artikel über das Tun ad-hoc-Joins , die helfen können.
Andere Tipps
Setzen Sie die Bedingungen in der auch enthalten. Z. B:
$users = $this->User->find('all', array('contain' => array(
'Region' => array(
'Country' => array(
'conditions' => array('Country.code' => 'US'),
),
),
)));
Sehen Sie das zweite bis zum vorletzten Beispiel in der Contain Handbuch