我正在从数据库中的同一个表中提取两个不同的数据。我正在使用并集合并这些数据,但并未显示所有结果。所以我想使用unionAll。我可以将它与 Eloquent 一起使用吗?
我的代码:
$model = OrderDetail::with('product')->whereBetween('created_at', [Carbon::createFromDate($request['year_first'])->startOfYear(), Carbon::createFromDate($request['year_first'])->endOfYear()])->get()->groupBy(['service_id'])
->union(OrderDetail::with('product')->whereBetween('created_at', [Carbon::createFromDate($request['year_last'])->startOfYear(), Carbon::createFromDate($request['year_last'])->endOfYear()])->get()->groupBy(['service_id']));
当我尝试使用 unionAll() 时,出现以下错误:
Method Illuminate\Database\Eloquent\Collection::unionAll does not exist.
unionAll()有不同的用途吗?
union
,而不是查询生成器的 union
。这是因为在 get()
之前有一个 union
。要获得与您需要的结果相当相似(但可能不相同)的结果,您可以执行以下操作:
$model = OrderDetail::with('product')->whereBetween('created_at', [Carbon::createFromDate($request['year_first'])->startOfYear(), Carbon::createFromDate($request['year_first'])->endOfYear()])
->unionAll(OrderDetail::with('product')->whereBetween('created_at', [Carbon::createFromDate($request['year_last'])->startOfYear(), Carbon::createFromDate($request['year_last'])->endOfYear()]))
->get()->groupBy(['service_id']);
这使得
union
和 unionAll
在查询的该部分中可用。旁注,您可能会遇到急切加载问题,我没有检查它是否会在联合查询中发生。