Pull to refresh

Comments 7

Единственное что не нравится в пользовательских репозитриях доктрины — пока не откроешь сам файл не вспомнишь какие там есть функции, да и не факт, что сам репозиторий существует. А так вцелом хорошая замена старых Table-классов и отказ от пустышек.
По поводу кода, то можно сократить:

\Doctrine\ORM\Query\Expr\Select -> Select

А также писать что-то вроде,

$qb->select()->where()->from()…

так меньше шансов сделать глупую ошибку и потом искать её в realtime.
так писать не просто правильнее с точки зрения отладки, но и читаемее. Мы ведь помним о том парне с дубиной, который суппортит наш проект, не правда ли? :)
Да, с этим я согласен. Спасибо за полезное замечание!
Наравне с пользовательскими репозитариями также удобно пользоваться пользовательскими QueryBuilder'ами, куда запирать общие части запросов. Тогда сами запросы внутри методов репозитория будут компактнее и читаемее + для каждого репозитория может существовать (или не существовать) свой класс QueryBuilder'а.

Пример продвинутого метода репозитория:

public function fincAllActive()
{
return $this->getQueryBuilder('users')->onlyActive()->getResult();
}


Соответственно — в QueryBuilder'е есть такие методы:

public function getResult()
{
return $this->getQuery()->getResult();
}

public function onlyActive()
{
return $this
->andWhere($this->getAlias() . '.active = :activeStatus')
->setParameter('activeStatus', true);
}


Пример начала миграции к такому подходу в рабочем проекте:

репозитоий:
github.com/litecommerce/core/blob/1.0-master/src/classes/XLite/Model/Repo/ARepo.php#L1257

QueryBuilder:
github.com/litecommerce/core/blob/1.0-master/src/classes/XLite/Model/QueryBuilder/AQueryBuilder.php

Активного использования пользовательского QueryBuilder'а там нету — но будет :)
Спасибо за наводку! Это действительно интересно — буду копать дальше:)
Называется Named Scopes, еще есть в RoR и Yii
Sign up to leave a comment.

Articles