2010-11-22 24 views
0

J'ai essayé de porter le projet im sur PropelORM. Jusqu'à présent, tout a été génial.Propel ORM - SELECT ... OERE col1 = col2

Cependant, j'ai rencontré des problèmes avec une structure arborescente que nous avons configurée dans l'une de nos tables.

Assez si ID = PARENTID puis c'est une racine. par ex.

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

Un et deux sont réellement des racines.

J'ai essayé quelque chose comme ça

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

mais il ne renvoie qu'une seule ligne où où ID = 0 et parent id = 0.

Toutes les idées?

Répondre

3

Vous devez utiliser un critère personnalisé pour parvenir à une telle requête Propel:

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

Un critère personnalisé vous permet d'écrire du code personnalisé dans votre clause WHERE. Dans un tel cas, le premier argument du critère # add n'a pas d'importance (il ne sera pas du tout utilisé par propel) mais nous mettons dans la colonne sur laquelle nous interrogeons par souci de lisibilité.

+0

Merci qui a bien fonctionné! – Luke

+0

Pourriez-vous accepter la réponse alors? :-) –

+0

Vous devriez réellement regarder dans le comportement d'ensemble imbriqué Propels. – vicTROLLA

0

Qu'en est-

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

Au moins moins d'écrire et semble être plus lisible.

A travaillé pour moi selon des critères plutôt complexes.

REMARQUE:$criteria->where(), moissonneuses-batteuses conditions par AND.

Si vous avez besoin de critères personnalisés à combiner via OR, vous devez utiliser $criteria->orWhere().