基于子选择查询数据的Laravel fluent查询

基于子选择查询数据的Laravel fluent查询,laravel,laravel-4,Laravel,Laravel 4,我正在尝试使用laravel 4获得一个查询,该查询生成一周中每一天(如周一、周二、周三等)的平均访客/客户数 我可以通过以下查询在mySql中执行此操作: SELECT day_of_week, AVG(visitors_sum) average_order FROM ( SELECT DAYNAME(play_date) day_of_week, DAYOFWEEK(play_date) day_num, TO_DAYS(play_date) `date`,

我正在尝试使用laravel 4获得一个查询,该查询生成一周中每一天(如周一、周二、周三等)的平均访客/客户数

我可以通过以下查询在mySql中执行此操作:

SELECT day_of_week, AVG(visitors_sum) average_order FROM 
(
  SELECT DAYNAME(play_date) day_of_week, 
     DAYOFWEEK(play_date) day_num, 
     TO_DAYS(play_date) `date`,
     sum(group_size) visitors_sum
  FROM reservations 
  GROUP BY `date`
) temp
GROUP BY day_of_week 
ORDER BY day_num
我试着简单地对查询执行db::raw,但这不起作用。除此之外,我无法解决这个问题。我首先尝试使用以下命令创建子查询:

$average = DB::table('reservations',
        DB::raw('DAYNAME(play_date) AS day_of_week, 
                 DAYOFWEEK(play_date) AS day_num, 
                 TO_DAYS(play_date) AS playdate,
                 sum(group_size) as visitors_sum)'))
        ->groupBy('day_of_week')
        ->get();
但是出现了一个错误未知的专栏“day_of_week”,所以我假设fluent不能支持groupBy中的alias,大概是sortby

那么,我如何重新创建这个查询以获得所需的结果,最好是在一次调用中

谢谢你的帮助


谢谢,找到结果了。我把这件事复杂化了,可以使用以下方法获得同样的结果:

$average = DB::select(
        'SELECT day_of_week, 
        AVG(visitors_sum) average_order 
        FROM 
            (
              SELECT DAYNAME(play_date) day_of_week, 
                     DAYOFWEEK(play_date) day_num, 
                     TO_DAYS(play_date) `date`,
                     sum(group_size) visitors_sum
              FROM reservations 
              GROUP BY `date`
            ) temp
        GROUP BY day_of_week 
        ORDER BY day_num');
这让我得到了我需要的结果。我认为
Select
需要一个表,但可以使用原始查询

谢谢

Laravel文档示例可以更详细一点 这对于您的请求来说有点晚了,但是如果这对您仍然有帮助,请尝试一下。我在Laravel fluent中也遇到了类似的问题。在将所有内容滚动到DB::select语句中时,我遇到的一个问题是无法对结果使用->paginate()方法,因为没有返回对象此代码将内容保存在DB对象中,允许您对结果使用对象方法,例如->paginate()、->toJson、->toArray、->toSql

下面使用的->from()方法在文档页面上只使用了一次,在一个模糊的用例中,我错过了阅读文档的前10次

我在本文末尾有一个->toSql()来获取我在下面发布的实际SQL代码的输出。您可以将其更改为->get()来检索数据。 这是Laravel 4 fluent根据上述代码生成的实际SQL,其功能与原始问题中的原始代码基本相同

string(457) "select day_of_week, AVG(visitors_sum) average_order from (
                  SELECT DAYNAME(play_date) day_of_week,
                         DAYOFWEEK(play_date) day_num,
                         TO_DAYS(play_date) `date`,
                         sum(group_size) visitors_sum
                  FROM reservations
                  GROUP BY `date`
                ) temp group by `temp`.`day_of_week` order by `temp`.`day_num` asc" 
string(457) "select day_of_week, AVG(visitors_sum) average_order from (
                  SELECT DAYNAME(play_date) day_of_week,
                         DAYOFWEEK(play_date) day_num,
                         TO_DAYS(play_date) `date`,
                         sum(group_size) visitors_sum
                  FROM reservations
                  GROUP BY `date`
                ) temp group by `temp`.`day_of_week` order by `temp`.`day_num` asc"