Как лучше добавлять пользовательские методы в построитель запросов на основе существующих методов? - PullRequest
0 голосов
/ 12 октября 2019

в следующем примере кода я использую пользовательский метод репозитория, где мне нужно вызвать его так $queryBuilder = $this->addFilterByVisible($queryBuilder);, но я бы хотел назвать его так $queryBuilder->andWhere(...)->addFilterByVisible()

возможно ли это? возможно ли это без работы с AST и добавления пользовательских функций dql, например, описанных здесь https://www.doctrine -project.org / 2010/03/29 / doctrine2-custom-dql-udfs.html

такое решение просто расширить построитель запросов и переопределить метод createQueryBuilder?

это текущий «полный» пример.

class PersonRepository extends ServiceEntityRepository
{
    protected function addFilterByVisible(QueryBuilder $queryBuilder): QueryBuilder
    {
        $queryBuilder
            ->andWhere('person_group.visible = :group_is_visible')
            ->andWhere('person.visible = :person_is_visible')
            ->setParameter('group_is_visible', true)
            ->setParameter('person_is_visible', true)
        ;

        return $queryBuilder;
    }

    protected function queryAllSorted()
    {
        $queryBuilder = $this->createQueryBuilder('person');
        $queryBuilder
            ->innerjoin('person.group', 'person_group')
            ->addSelect('person_group')
        ;
        $queryBuilder = $this->addFilterByVisible($queryBuilder);

        return $queryBuilder;
    }
}

для справки: как создать собственный построитель запросов Пользовательский QueryBuilder в Doctrine

...