laravel eloquent 中是否有 unionall 的使用?

问题描述 投票:0回答:1

我正在从数据库中的同一个表中提取两个不同的数据。我正在使用并集合并这些数据,但并未显示所有结果。所以我想使用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()有不同的用途吗?

php laravel union-all
1个回答
1
投票

您的查询使用集合中的

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
在查询的该部分中可用。旁注,您可能会遇到急切加载问题,我没有检查它是否会在联合查询中发生。

© www.soinside.com 2019 - 2024. All rights reserved.