Есть ли аналог именованной области видимости для Doctrine2?

Есть ли в Doctrine2 функции, аналогичные именные области?


person Koc    schedule 14.11.2010    source источник
comment
Также в Yii framework есть yiiframework.com/doc/guide /1.1/en/database.ar#named-scopes   -  person Koc    schedule 14.11.2010


Ответы (2)


В D2 его нет, но, вероятно, было бы несложно реализовать систему, аналогичную Yii, используя QueryBuilder, который позволяет создавать запросы по частям, используя более программный подход.

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

Вероятно, есть несколько разных способов приблизиться к этому, так что это всего лишь один быстрый пример. Трудная часть, вероятно, будет заключаться в том, чтобы выяснить, как обрабатывать коллизии критериев.

person Bryan M.    schedule 15.11.2010