我有一个相当复杂的查询,其中包含大量数据。目前我有两个类似复杂查询的工作,现在我需要写第三份工作。查询也用于数据表,因此我必须确保它们是相同的不是最佳的,我有冗余代码。但是,我想改进我的代码,只使用一个接受任何查询的工作。
我想要做的是将用于我的数据表的查询传递给单个作业,该作业接受任何查询并运行它创建一个excel导出。但是我不确定是否可以序列化实际查询而不是结果,因为查询可能需要很长时间才能执行,我想通过我的Redis队列运行它。
如果我尝试将Eloquent查询传递给作业,我会收到“您无法序列化或反序列化PDO实例”
如何解决此问题并将查询发送到要执行的作业?
答案 0 :(得分:1)
Laravel Jobs默认使用 SerializesModels 特征,因此请检查您的作业是否正在使用该特征。此外,您无法序列化PDO对象,这就是您获得异常的原因。
要摆脱错误,你可以取出特征,但恕我直言,我不会将您的Eloquent查询传递给作业。而是根据传递给作业的最少的必需参数将查询保留在作业执行中。
“我想要做的是将用于我的数据表的查询传递给单个作业,该作业接受任何查询并运行它创建一个excel导出”
查询或一系列查询很可能被描述为单词中的任务,因此为每个特定目的创建单独的作业。如果您为所有任务制作一份工作,那么它的可读性就会降低,难以维护和维护。总结出工作目的之间的区别。
相反,我会删除您所说的“冗余”代码,创建一个Job,您可以在其中编写公共代码&将此Job扩展为单独的Jobs。就可重用代码而言,您可以使用存储库或服务&从你单独的工作中调用它。