【发布时间】:2021-06-12 12:46:20
【问题描述】:
我有这个 Eloquent 查询想要按天、昨天、一周、上周、本月、上个月、今年、去年显示订单,这是我的代码,但是,它不起作用或确实有重新做代码的想法。在我的示例代码中,我不知道如何使用不同的参数将每个 with() 查询放入另一个查询中。请帮忙。
$product_orders = Product::where('status', 'active')
->with(['order_detail' => function($query) {
$query->with('order');
$query->where('created_at', '>=', today());
}])
->with(['order_detail' => function($query) {
$query->with('order');
$query->where('created_at', '>=', Carbon::yesterday());
}])
->with(['order_detail' => function($query) {
$query->with('order');
$query->where('created_at', '>=', [now()->startOfWeek(), now()->endOfWeek()]);
}])
->with(['order_detail' => function($query) {
$query->with('order');
$query->where('created_at', '>=', [now()->subWeek()->startOfWeek(), now()->subWeek()->endOfWeek()]);
}])
->with(['order_detail' => function($query) {
$query->with('order');
$query->whereYear('created_at', '=', now()->year);
$query->whereMonth('created_at', '=', now()->month);
}])
->with(['order_detail' => function($query) {
$fromDate = Carbon::now()->subMonth()->startOfMonth()->toDateString();
$tillDate = Carbon::now()->subMonth()->endOfMonth()->toDateString();
$parse_fromDate = Carbon::parse($fromDate.' 00:00:00');
$parse_tillDate = Carbon::parse($tillDate.' 23:59:59');
$query->with('order');
$query->whereBetween('created_at',[$parse_fromDate,$parse_tillDate]);
}])
->with(['order_detail' => function($query) {
$query->with('order');
$query->whereYear('created_at', '>=', now()->year);
}])
->with(['order_detail' => function($query) {
$last_year = now()->year - 1;
$query->with('order');
$query->whereYear('created_at', '>=', $last_year);
}])
->get();
【问题讨论】:
-
我认为你的方法有点适得其反。如果您的代码按预期工作,您将执行 16 个查询,而您可以通过 3 个查询和对结果进行一些过滤来实现相同的结果。
-
@apokryfos,你能建议重做我的代码吗?我不知道这种方法最好的是什么。请帮忙
标签: laravel eloquent laravel-7 eloquent-relationship