Mysql 如何将sql查询转换为laravel queryBuilder

Mysql 如何将sql查询转换为laravel queryBuilder,mysql,laravel,eloquent,query-builder,Mysql,Laravel,Eloquent,Query Builder,我有一个sql查询,如下所示: SELECT count(as_user_id) as Users, CONCAT( HOUR(created_at), ' to ', CONCAT( HOUR(created_at), ':59:59' ) ) as Time_Frame FROM content_impression WHERE created_at >= NOW() - INTERVAL 1 DAY GROUP BY DATE(created_at), HOUR(creat

我有一个sql查询,如下所示:

SELECT count(as_user_id) as Users,
 CONCAT( HOUR(created_at), ' to ', CONCAT( HOUR(created_at), ':59:59' ) ) as Time_Frame
FROM content_impression
WHERE created_at >= NOW() - INTERVAL 1 DAY
GROUP BY 
 DATE(created_at), 
 HOUR(created_at)
ORDER BY count(as_user_id) DESC
查询结果为:

用户|时间|框架

  • 2 | 10至10:59:59
  • 2 | 9至9:59:59
  • 1 | 11至11:59:59
  • 1 | 12至12:59:59
我想转换成雄辩的质询

我已经尽力了

$results = DB::table("content_impression")
        ->select(DB::raw(" count(as_user_id) as Users,CONCAT( HOUR(created_at), ' to ', CONCAT( HOUR(created_at), ':59:59' ) ) as Time_Frame"))
        ->whereRaw("created_at >= NOW() - INTERVAL 1 DAY")
        ->groupByRaw("DATE(created_at),HOUR(created_at)")->orderByRaw("count(as_user_id) DESC")->get();
错误如下所示

像这样尝试:

  • 使用
    where('created_at','>=',now()->subDay(1))
    代替
    whereRaw(“created_at>=now()-INTERVAL 1 DAY”)
  • 使用
    groupBy('Time\u Frame')
    ,因为错误告诉您按
    groupBy
    选择的列,该列名为
    Time\u Frame
    而非
    日期(创建时间)、小时(创建时间)
  • 使用
    latest('Users')
    而不是
    orderByRaw(“count(as_user\u id)DESC”)
    并在
    orderBy
    中使用您定义的别名(
    Users
    ),而不是
    count(as_user\u id)

  • 在深入研究了多个stackoverflow问题和答案后,我得出了以下结论:
    $results=DB::table(“as_-travely\u-content\u-impression”)->选择(DB::raw(“count(as_-user\u-id)as-Users”),“CONCAT(HOUR(created_-at)”,“to”,“CONCAT(HOUR(created_-at)”,“:59:59”)作为时间框架”)->两者之间的位置(“created_-at”,“array”(Carbon::now(),Carbon::now(),Carbon::now())->subDays(1))->groupBy([DB::raw('DATE(created_at')),DB::raw('HOUR(created_at')))->orderBy('Users','desc')->get();
    下面列出了一些有助于解决此问题的链接:错误本身与querybuilder无关,而与laravel/数据库配置有关。对于此错误消息。
    $results = DB::table("content_impression")
                   ->selectRaw(" count(as_user_id) as Users,CONCAT( Hour(created_at), ' to ', CONCAT( Hour(created_at), ':59:59' ) ) as Time_Frame")
                   ->where('created_at','>=',now()->subDay(1))
                   ->groupBy('Time_Frame')->latest('Users')->get();