推进:测试现有对象是否匹配条件


Propel: test existing object for matching the criteria

要求Propel检查现有对象(检索的或新创建的)是否符合某些条件的最佳方法是什么?我想知道Propel是否有天生的能力来做到这一点:-)我问的是简单的方法,因为用复杂的方法做这件事很容易。理想情况下是这样的:

    $fruit = FruitPeer::doSelectOne( new Criteria ); // get whatever fruit
    $crit1 = new Criteria;
    $crit1->add(FruitPeer::REF_COLOR, 'green');      // criteria for green fruits
    if ($fruit->matches($crit1)) {                   // check if my fruit is green
        echo 'My fruit is green';
    }

这不可能以微不足道的方式实现,因为 Criteria 对象仅用于生成 SQL 查询,而不用于匹配对象。但是,您可以再次查询数据库。Propel 的实例池应避免在检测到查询对象的实例已存在时再次检索所有数据。

您可能可以做的最简单的事情是在主键上添加一个条件,然后发出计数。

如果您有查询(ModelCriteria实例而不是普通Criteria实例),则可以在一行中执行此操作:

if($critQuery1->filterByPrimaryKey($fruit->getPrimaryKey())->count() > 0) {…}