求教,获取昨日订单金额,今日订单额更佳优雅的写法

//昨天销售额
$user_promote_money_yesterday = UserPromoteOrder::where('promote_user_id', \Auth::id())->where('created_at', 'like', '%' . Carbon::yesterday()->format('Y-m-d') .'%')->sum('percentage_amount');
//今日销售额
$user_promote_money_today = UserPromoteOrder::where('promote_user_id', \Auth::id())->where('created_at', 'like', '%' . Carbon::now()->format('Y-m-d') .'%')->sum('percentage_amount');
//今日订单数
$user_promote_money_today_num = count(UserPromoteOrder::where('promote_user_id', \Auth::id())->where('created_at', 'like', '%' . Carbon::now()->format('Y-m-d') .'%')->get());

感觉。。。我这个写法有点多余,所以你们是怎么写

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案
$yesterday = date('Y-m-d', strtotime('-1 day'));

// 昨天销售额
$user_promote_money_yesterday = UserPromoteOrder::where('promote_user_id', \Auth::id())->whereBetween('created_at', [$yesterday . ' 00:00:00', $yesterday . ' 23:59:59'])->sum('percentage_amount');

$today = date('Y-m-d');

// 今日销售额&今日订单数
$user_promote_today = UserPromoteOrder::where('promote_user_id', \Auth::id())->whereBetween('created_at', [$today . ' 00:00:00', $today . ' 23:59:59'])->select([DB::raw('SUM(`percentage_amount`) AS `today_amount`'), DB::raw('COUNT(*) AS `today_num`')])->first();

楼上正解:先加索引,然后再谈优雅

4年前 评论
讨论数量: 9
Jourdon
where('created_at', 'like', '%' . Carbon::now()->format('Y-m-d') .'%')

这个你是认真的? 为啥要用like? 拿到今天的开始时间,结束时间,直接用between不好吗?

4年前 评论
Epona

我会先把昨天和今天的订单全查出来,然后再用php计算昨天和今天的相关东西。

4年前 评论

为什么用like 用,whereDate就好了

4年前 评论

既然都优雅了,为什么还要用 like

4年前 评论

created_atpromote_user_id加个联合索引,用between吧,然后在谈优雅的事情

4年前 评论
$yesterday = date('Y-m-d', strtotime('-1 day'));

// 昨天销售额
$user_promote_money_yesterday = UserPromoteOrder::where('promote_user_id', \Auth::id())->whereBetween('created_at', [$yesterday . ' 00:00:00', $yesterday . ' 23:59:59'])->sum('percentage_amount');

$today = date('Y-m-d');

// 今日销售额&今日订单数
$user_promote_today = UserPromoteOrder::where('promote_user_id', \Auth::id())->whereBetween('created_at', [$today . ' 00:00:00', $today . ' 23:59:59'])->select([DB::raw('SUM(`percentage_amount`) AS `today_amount`'), DB::raw('COUNT(*) AS `today_num`')])->first();

楼上正解:先加索引,然后再谈优雅

4年前 评论

谢谢大家的指导,入门新手,谢谢大家

4年前 评论

能一句Sql解决的事情不要重复操作,条件不一样的话就用集合(collect)筛选处理。

$today = date('Y-m-d');
$yesterday = date('Y-m-d', strtotime('-1 day'));

$promoteMoney = UserPromoteOrder::select([DB::raw('FROM_UNIXTIME(datadate,'%Y-%m-%d') AS datadate'), DB::raw('SUM(`percentage_amount`) AS `amount`'), DB::raw('COUNT(*) AS `pay_num`')])->where('promote_user_id', \Auth::id())->whereBetween('created_at', [$yesterday . ' 00:00:00', $today . ' 23:59:59'])->groupByRaw("FROM_UNIXTIME(datadate,'%Y-%m-%d')")->first();

// 昨天销售额
$yesterday_amount = $promoteMoney[$yesterday]['amount'];
$yesterday_pay_num = $promoteMoney[$yesterday]['pay_num'];
// 今日销售额&今日订单数
$yesterday_amount = $promoteMoney[$today]['amount'];
$yesterday_pay_num = $promoteMoney[$today]['pay_num'];
1年前 评论
wongvio (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!