为了账号安全,请及时绑定邮箱和手机立即绑定

基于过期状态的 OrderBy 优惠券 Laravel

基于过期状态的 OrderBy 优惠券 Laravel

PHP
慕哥6287543 2022-07-09 10:32:25
我需要显示优惠券列表并根据 created_at 日期和到期状态对其进行排序。我的优惠券表的列idnamepriceexpired_atcreated_atstatus我的 laravel 查询$coupons= Coupon::where('status', 2)->orderBy('created_at', 'DESC')->orderBy( First I will need to compare expired_at with today date here)->get();问题是我不知道如何 orderBy coupon_status,我想在列表底部显示所有过期的优惠券,在列表顶部显示正在进行的优惠券,并且 orderBy created_at (最新和正在进行的优惠券在顶部名单)所以可能需要创建临时列来获取过期状态,然后才能对列表进行排序。任何想法如何实现这一目标?
查看完整描述

3 回答

?
www说

TA贡献1775条经验 获得超8个赞

比较过期日期和今天 ( 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"

);


查看完整回答
反对 回复 2022-07-09
?
长风秋雁

TA贡献1757条经验 获得超7个赞

你也可以这样写:

$coupons= Coupon::where('status', 2)->orderBy([ 'coupon_status' => 'ASC', 'created_at' => 'DESC' ])->get();

我希望它会帮助你:)


查看完整回答
反对 回复 2022-07-09
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

只需使用ORDER BY coupon_status ASC, created_at DESC'

expired_at可以与CURDATE()

试试这个查询:

$coupons= Coupon::where('status', 2)
                ->orderBy(\DB::raw('(IF((expired_at IS NULL OR expired_at < CURDATE()), 1, 0 )) ASC, created_at DESC'))
                ->get();


查看完整回答
反对 回复 2022-07-09
  • 3 回答
  • 0 关注
  • 170 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号