我一直在尝试将项目移植到 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 = 0
和parent id = 0.
有什么想法吗?
答案 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()
。