我该如何解决这个原始查询

时间:2019-09-22 14:00:18

标签: php sql laravel

我正在尝试使用laravel db从我的数据库中获取一些数据,并且会引发错误

$most_purchased_day = (int)Data::select('type')
                      ->whereDate('created_at', '=', date('d'))
                      ->groupBy('type')
                      ->orderByRaw('COUNT(*) DESC')
                      ->first()->network_id;

$most_purchased_day = (int)Data::select('type')
                     ->whereDate('created_at', '=', date('d'))
                     ->groupBy('type')
                     ->orderByRaw('COUNT(*) DESC')
                     ->first()->network_id;

我希望输出结果基于网络ID是购买最多的商品

1 个答案:

答案 0 :(得分:0)

由于created_at的碳素实例与date('d')不匹配,因此未检索到第一个用户 更改代码以改为使用today()帮助器

$most_purchased_day = (int)Data::select('type')
                      ->whereDate('created_at', '=', today())
                      ->groupBy('type')
                      ->orderByRaw('COUNT(*) DESC')
                      ->first()->network_id;

假设今天创建了一个雄辩的模型

App\Data {
     id: 1,
     created_at: "2019-09-22 13:15:19",
     updated_at: "2019-09-22 13:15:19",
   }

date('d')仅返回一个整数,该整数是当前月份的天数(22),不能与2019-09-22 13:15:19参见PHP:date

匹配。

如果要获取在任意天(即月和年)的当天创建的记录

使用whereDay

$most_purchased_day = (int)Data::select('type')
                      ->whereDay('created_at', '=', date('d'))
                      ->groupBy('type')
                      ->orderByRaw('COUNT(*) DESC')
                      ->first()->network_id;

来自Laravel Docs

whereDate / whereMonth / whereDay / whereYear / whereTime

whereDay方法可用于将列的值与一个月的特定日期进行比较:

$users = DB::table('users')
                ->whereDay('created_at', '31')
                ->get();