2010-11-22 60 views
0

我一直在尝试移植到PropelORM。到目前为止,一切都很好。Propel ORM - SELECT ... WHERE col1 = col2

但是我遇到了我们在其中一个表中设置的树结构的问题。

如果ID = PARENTID那么它就是一个根。 例如。

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

其中一个和两个实际上是根。

我想是这样的

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

但它只返回一行哪里哪里ID = 0parent id = 0.

任何想法?

回答

3

您需要使用自定义条件与推进,实现这样的查询:

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

一个自定义条件,您可以编写自定义代码的WHERE子句。在这种情况下,Criteria#add的第一个参数并不重要(它根本不会被propel使用),但为了可读性,我们将其放入了查询的列。

+0

谢谢,效果很好! – Luke 2010-11-22 20:05:50

+0

那么你能接受答案吗? :-) – 2010-11-23 22:06:35

+0

你应该看看Propels嵌套集行为。 – vicTROLLA 2011-08-16 06:48:52

0

什么

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

至少少写,似乎是更具可读性。

在相当复杂的标准下为我工作。

备注:$criteria->where(),结合条件通过AND

如果您需要通过OR合并自定义标准,则需要使用$criteria->orWhere()

相关问题