【问题标题】:Propel ORM - SELECT ... WHERE col1 = col2推进 ORM - SELECT ... WHERE col1 = col2
【发布时间】:2010-11-22 08:13:33
【问题描述】:

我一直在尝试将我正在进行的项目移植到 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.

有什么想法吗?

【问题讨论】:

    标签: php orm criteria propel


    【解决方案1】:

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

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

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

    【讨论】:

    • 您实际上应该研究一下 Propels 嵌套集的行为。
    【解决方案2】:

    怎么样

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

    至少写得更少,似乎更易读。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-28
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-17
      • 1970-01-01
      相关资源
      最近更新 更多