Существует ли аналог именованной области для Doctrine2?

#php #mysql #orm #named-scope #doctrine-orm

#php #mysql #orm #named-scope #doctrine-orm

Вопрос:

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

Комментарии:

1. Они также есть в Yii framework yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes

Ответ №1:

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

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

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

Ответ №2: