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

最佳答案

没有人融入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();
   }
}


解决此问题的方法可能有几种,因此仅是一个简单示例。困难的部分可能是弄清楚如何处理标准冲突。

关于php - Doctrine2是否有命名示波器的模拟物?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4179452/

10-15 12:28