如何在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中按特定月份获取用户订单数据?的主要内容,如果未能解决你的问题,请参考以下文章