0

Doctrine2 是否具有类似于 ActiveRecord 的命名范围的功能?

4

2 回答 2

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();
   }
}

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

于 2010-11-15T17:23:29.060 回答
0

http://www.doctrine-project.org/jira/browse/DDC-750

于 2010-11-28T21:02:18.770 回答