我需要显示优惠券列表,并根据created_at日期和到期状态对其进行订购。

我的优惠券表中的列

id
name
price
expired_at
created_at
status


我的laravel查询

$coupons= Coupon::where('status', 2)->orderBy('created_at', 'DESC')->orderBy( First I will need to compare expired_at with today date here)->get();


问题是我不知道如何orderbyBy coupon_status,我想在列表底部显示所有过期的优惠券,在列表顶部显示正在进行的优惠券,也要在orderBy created_at中显示(最新的和正在进行的优惠券在顶部名单)

因此可能需要先创建临时列以获取到期状态,然后才能订购列表。
任何想法如何实现这一目标?

最佳答案

比较今天的过期时间(expired_at < NOW()

$coupons= Coupon::where('status', 2)->orderByRaw(
 "CASE WHEN expired_at IS NULL OR expired_at > CURDATE() THEN 1 ELSE 0 END DESC"
);

关于php - 基于到期状态的Laravel OrderBy优惠券,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59541723/

10-12 07:17