如何在laravel中按特定月份获取用户订单数据?

Posted

技术标签:

【中文标题】如何在laravel中按特定月份获取用户订单数据?【英文标题】:How to get user order data by specific month in laravel? 【发布时间】:2021-11-04 15:34:35 【问题描述】:

我想按一年中特定月份的用户订单数据。

这是我的订单表

标识 |用户 ID |价格 |数量 |总计

这是我的订单模型

 public function user() 
    return $this->belongsTo(User::class);

这是我的用户模型

 public function orders()
    return $this->hasMany(Order::class);

在控制器中,通过这样做我得到所有用户订单

 $user= User::with('orders')->get();
 dd($user->orders);

现在,我如何获取特定月份的用户订单详情? 我想按月显示所有用户列表及其订单总额。

【问题讨论】:

看看whereHas()方法。 如果您也只想获得那些特定月份的订单,您也应该查看Constraining Eager Loads。 感谢您的建议@Rwd 【参考方案1】:

试试这个让用户知道他们 9 月份的订单总数:

$users = User::withSum(['orders as september_total' => function ($query) 
    $query->whereMonth('created_at', '9'); // September
, 'total'])->get();

这将在生成的模型上放置一个september_total 属性。

【讨论】:

【参考方案2】:

看看这两个查询:

$users = User::query()->with(['orders' => function($q)
    $q->whereRaw('MONTH(orders.created_at) = 2');
])->get();

// eager load all orders that have been created on month 2

$users = User::query()->whereHas('orders', function($q)
    $q->whereRaw('MONTH(orders.created_at) = 2');
)->get();

// you'll get all users with orders on month 2 (no eager loading)

您当然可以结合使用with(急切加载)和whereHas(过滤用户),以便“仅获取第 2 个月有订单的用户并急切加载这些订单”。

当然,您可以随意使用其他列(例如ordered_at)或根据需要更改月份。

【讨论】:

以上是关于如何在laravel中按特定月份获取用户订单数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 woocommerce 中按日期获取用户订单?

尝试使用数组仅获取 Laravel 中每个订单的特定产品

在laravel中按模型从数据库中获取数据时如何附加关系

如何在codeigniter中按日期降序获取订单

在 laravel 中按日期获取数据

在颤动的蜂巢中按日期检索数据