Как отделить запрос к другому классу / файлу? - PullRequest
0 голосов
/ 14 февраля 2019

Я создал отдельный класс для одной из моих таблиц данных (скажем, MyTableType).Внутри ORMAdapter я создал собственный запрос, который становится довольно длинным и сложным.Вот почему я хотел бы отделить его от кода, который отвечает за создание самой таблицы, и переместить его в какой-то другой класс (например, MyTableQuery).

Я использую Symfony 4.2 и пакет omines / datatables-bundle.

Что должен возвращать этот класс для запросов?И каков наилучший способ получить возвращенный запрос в MyTableType?

class MyTableType implements DataTableTypeInterface
{
    public function configure(DataTable $dataTable, array $options)
    {
        $request = $options['request'];

        $dataTable
            ->add('id',
                NumberColumn::class,
                array(
                    'label' => 'ID',
                    'globalSearchable' => false
                )
            )

Some more columns

->createAdapter(ORMAdapter::class,
                array(
                    'entity' => MyEntity::class,
                    'query' => function (QueryBuilder $builder) use ($request)
                    { 
                        //Long query I'd prefer to get from somewhere else
                    }
                )
            )
        ;
    }
}

Внутри моей опции query я бы хотел получить возврат из этого пользовательского класса MyTypeQuery.Это сделает класс MyTableType намного чище.Какой лучший способ сделать это?

1 Ответ

0 голосов
/ 14 февраля 2019

Хорошо, я не знаю, является ли это лучшим решением, но я сделал следующее:

* Pass Doctrine Manager to Table Building class

* Inside my query option pass $builder into repository and build a query on top passed variable.
  And it works.
class MyTableType implements DataTableTypeInterface
{
    public function configure(DataTable $dataTable, array $options)
    {
        $request = $options['request'];
        $em = $options['entityManager'];

        $dataTable
            ->add('id',
                NumberColumn::class,
                array(
                    'label' => 'ID',
                    'globalSearchable' => false
                )
            )

... Some more columns ...

->createAdapter(ORMAdapter::class,
                array(
                    'entity' => MyEntity::class,
                    'query' => function (QueryBuilder $builder) use ($request, $em)
                    { $em->getRepository(MyClass::class)->find($request, $builder) }
                )
            )
        ;
    }
}

Внутри своего хранилища я возвращаю переданную переменную QueryBuilder, и все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...