Doctrine2是否有命名范围的模拟?

时间:2010-11-14 20:13:27

标签: php mysql orm named-scope doctrine-orm

Doctrine2是否具有与ActiveRecord的named scopes类似的功能?

2 个答案:

答案 0 :(得分:2)

没有一个被烘焙到D2中,但使用Doctrine 2的QueryBuilder类实现类似于Yii的系统可能不会太过分,这允许您构建一个查询,使用更具程序性的方法。

 $qb = $em->createQueryBuilder;
 $qb->select('u')
    ->from('User', 'u')
    ->where('active IS NOT NULL);

似乎Yii的实现将查询条件存储在数组中,并且在使用命名范围时将它们注入到查询中。您可以轻松地执行类似的操作,返回一个QueryBuilder对象,并预先加载这些参数。

class UserRepository extends EntityRepository
{
   private $_namedScopes;

   public getActiveUsersWhoLoggedInLastWeek()
   {
      // return a query builder for this model
      $qb = $this->_namedScopes->initScope();

      // start adding pre-defined criteria
      $qb = $this->_namedScopes->addScope($qb, 'active')
      $qb = $this->_namedScopes->addScope($qb, 'lastWeek');

      return $qb->getQuery()->getResult();
   }
}

可能有几种不同的方法可以解决这个问题,所以这只是一个简单的例子。困难的部分可能是弄清楚如何处理标准碰撞。

答案 1 :(得分:0)