Comments 7
Единственное что не нравится в пользовательских репозитриях доктрины — пока не откроешь сам файл не вспомнишь какие там есть функции, да и не факт, что сам репозиторий существует. А так вцелом хорошая замена старых Table-классов и отказ от пустышек.
0
По поводу кода, то можно сократить:
\Doctrine\ORM\Query\Expr\Select -> Select
А также писать что-то вроде,
$qb->select()->where()->from()…
так меньше шансов сделать глупую ошибку и потом искать её в realtime.
\Doctrine\ORM\Query\Expr\Select -> Select
А также писать что-то вроде,
$qb->select()->where()->from()…
так меньше шансов сделать глупую ошибку и потом искать её в realtime.
+1
Наравне с пользовательскими репозитариями также удобно пользоваться пользовательскими QueryBuilder'ами, куда запирать общие части запросов. Тогда сами запросы внутри методов репозитория будут компактнее и читаемее + для каждого репозитория может существовать (или не существовать) свой класс QueryBuilder'а.
Пример продвинутого метода репозитория:
Соответственно — в QueryBuilder'е есть такие методы:
Пример начала миграции к такому подходу в рабочем проекте:
репозитоий:
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'а там нету — но будет :)
Пример продвинутого метода репозитория:
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'а там нету — но будет :)
+2
Sign up to leave a comment.
Пользовательские репозитории в ORM Doctrine 2