2010-11-22 9 views
0

Ich habe versucht, Projekt im arbeiten auf Propelorm zu portieren. So weit war alles großartig.Propel ORM - WÄHLEN ... WHERE col1 = col2

Ich habe jedoch Probleme mit einer Baumstruktur, die wir in einer unserer Tabellen eingerichtet haben.

Ziemlich viel wenn ID = PARENTID dann ist es eine Wurzel. z.

ID | NAME | PID 
0 | ZERO | 0 
1 | ONE | 1 
2 | TWO | 1 
3 | THREE| 3 

Eins und zwei sind eigentlich Wurzeln.

habe ich versucht, so etwas wie dieses

$res_crit = new Criteria(); 
$res_crit->add(PropertyTypePeer::ID, PropertyTypePeer::CONVERTEDID, Criteria::EQUAL); 
$result = PropertyTypePeer::doSelect($res_crit, Propel::getConnection('system')); 

aber es gibt nur eine Zeile, in denen ID = 0 und parent id = 0.

Irgendwelche Ideen?

Antwort

3

Sie benötigen einen benutzerdefinierten Kriterien verwenden, wie eine Abfrage mit Propel zu erreichen:

$res_crit->add(PropertyTypePeer::ID, PropertyTypePeer::ID.' = '.PropertyTypePeer::CONVERTEDID, Criteria::CUSTOM); 

A benutzerdefinierten Kriterien können Sie benutzerdefinierte Code in Ihrer WHERE-Klausel schreiben. In einem solchen Fall spielt das erste Argument von "Criteria # add" keine Rolle (es wird überhaupt nicht von proprive verwendet), aber wir fügen die Spalte ein, die wir zur besseren Lesbarkeit abfragen.

+0

Danke das hat gut funktioniert! – Luke

+0

Können Sie die Antwort dann akzeptieren? :-) –

+0

Sie sollten tatsächlich in geschachtelte Set Propel Verhalten schauen. – vicTROLLA

0

Was

$res_crit->where(PropertyTypePeer::ID.' = '.PropertyTypePeer::CONVERTEDID); 

Mindestens weniger zu schreiben und scheint besser lesbar zu sein.

Arbeitete für mich in ziemlich komplexen Kriterien.

HINWEIS:$criteria->where(), kombiniert Bedingungen durch AND. Wenn Sie benutzerdefinierte Kriterien benötigen, die durch OR kombiniert werden, müssen Sie $criteria->orWhere() verwenden.

Verwandte Themen