Propel ORM - SELECT ... WHERE col1 = col2

时间:2010-11-22 08:13:33

标签: php orm criteria propel

我一直在尝试将项目移植到 PropelORM 。到目前为止,一切都很好。

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

几乎是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.

的一行

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

您需要使用自定义条件来使用propel实现此类查询:

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

自定义条件允许您在WHERE子句中编写自定义代码。在这种情况下,Criteria #add的第一个参数无关紧要(它根本不会被推进使用)但是为了便于阅读,我们将列入我们要查询的列。

答案 1 :(得分:0)

怎么样?
$res_crit->where(PropertyTypePeer::ID.' = '.PropertyTypePeer::CONVERTEDID);

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

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

注意: $criteria->where(),通过AND组合条件。

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