2016-12-21 2 views
0

У меня довольно сложный запрос с большим количеством данных, которые получаются. В настоящее время у меня есть две вакансии с похожими сложными запросами, и теперь мне нужно написать третью работу. Запросы также используются для данных, поэтому я должен убедиться, что они такие же, что и не оптимально, у меня избыточный код. Однако я хотел бы улучшить свой код и просто использовать одно задание, которое будет принимать любые запросы.Отправить eloquent запрос к заданию

Что я хотел бы сделать, это передать запрос, используемый для моих данных, на одно задание, которое принимает любой запрос и запускает его, создавая экспорт excel. Однако я не уверен, что можно сериализовать фактический запрос вместо результата, поскольку запрос может занять много времени, и я хотел бы запустить его через очередь Redis, которую у меня есть.

Если я пытаюсь передать Красноречивый запрос на работу я получаю «Вы не можете сериализовать или десериализации экземпляры PDO»

Как я могу избавиться от этой проблемы и отправить запрос на работу, чтобы быть выполнена?

ответ

0

Laravel Jobs по умолчанию использует SerializesModels trait, так что проверьте, работает ли ваша работа с этой чертой. Также вы не можете сериализовать объекты PDO, поэтому вы получаете исключение.

Чтобы избавиться от ошибки, вы можете вынуть признак, но IMHO Я бы не передал ваш Красноречивый запрос в Job. Вместо этого сохраняйте запросы в выполнении задания на основе минимум необходимых параметров, переданных на Работу.

«То, что я хотел бы сделать, это передать запрос, используемый для моих DataTables для одного задания, который принимает любой запрос и запускает его создание экспорта в Excel»

запрос или серию запросов могут скорее всего, будет описываться как задача в словах, поэтому создайте отдельный Иов для каждой конкретной цели. Если вы сделаете одно задание для всех своих задач, оно будет менее читаемым, сложнее поддерживать & заключить различие между назначением задания.

Вместо этого я удалю «лишний» код, о котором вы говорите, создайте задание, в котором вы пишете общий код &, добавьте это задание в отдельные задания. С точки зрения кода, который можно использовать повторно, вы можете использовать репозиторий или службу &, чтобы вызвать его из ваших отдельных Задания.

Смежные вопросы