Ярлыки

.htaccess (4) тестирование (8) шаблоны проектирования (3) css (5) Debian (6) docker (2) Doctrine2 (6) Git (6) html (4) java (6) javascript (13) jquery (11) LFS (3) linux (23) mac os (4) mod_rewrite (2) MSSQL (4) MySQL (18) ORM Doctrine (17) patterns (3) PDO (3) perl (7) PHP (64) PHPUnit (8) Python (15) SEO (2) Silex (1) SimpleXML (1) SQL (14) ssh (4) Ubuntu (24) Yii1 (1) Zend Framework (19) ZendFramework2 (8)

четверг, 8 марта 2012 г.

Doctrine2. Использование репозиториев.

При работе с Doctrine2 все манипуляции с базой производим через Doctrine\ORM\EntityManager.
Простой способ получить запись из базы данных.
$user = $em->find('Entities\User', $id);
Очень часто нам приходится работать с репозиториями объектов (что-то общее с коллекциями Doctrine1).
$user = $em->getRepository('Entities\User')->find($id);
В данном случае менеджер проверяет репозитории сопоставленные с данным классом и если таких нет,
то использует класс репозитория по-умолчанию (Doctrine\ORM\EntityRepository). Он содержит
следующие базовые методы:
public function findAll()
public function findBy(array $criteria)
public function findOneBy(array $criteria)
Часто этого бывает недостаточно. Класс EntityRepository содержит метод
public function createQueryBuilder($alias)
Мы можем наследовать базовый класс и создавать собственные репозитории
namespace Repositories;
 
use Doctrine\ORM\EntityRepository;
use Entities;
 
class UserRepository extends EntityRepository
{
    public function finderMethod($arguments){
        // My custom query etc
    }
}
Мы должны указать, что надо использовать новый репозиторий в классе модели
namespace Entities;
 
/** @Entity(repositoryClass="Repositories\UserRepository")
 *  @Table(name="dealers")
 */
class User
...
Теперь мы можем это использовать
$users = $em->getRepository('Entities\User')->finderMethod($arguments);

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

Отправить комментарий