将RAW查询转换为Laravel Query Builder标准

时间:2014-10-01 10:33:16

标签: jquery laravel-4 build converter query-builder

我想使用laravel Query Builder标记转换我的原始查询,使其与bllim Datatable包兼容,但我遇到了问题

正在运行的RAW查询

  SELECT 
        publisher_name, 
        SUM(sales) AS sales, 
        SUM(comission) AS comission, 
        SUM(sale_total) AS publisher_total_sale,
        sumOfTotalSales
  FROM reports_summary,
       (SELECT SUM(sale_total) AS sumOfTotalSales FROM reports_summary) AS subTotalSales
 WHERE campaign = ?   
 GROUP BY publisher_name, sumOfTotalSales 
 ORDER BY publisher_total_sale DESC', array($campaign)

我尝试了但没有工作

DB::table(DB::raw('SELECT SUM(sale_total) AS sumOfTotalSales FROM reports_summary) AS subTotalSales'))
            ->sum('sales')   
            ->sum('comission')           
            ->sum('sale_total AS publisher_total_sale')
            ->select( 'publisher_name', 'sumOfTotalSales')
            ->where('campaign',$campaign)
            ->groupBy('publisher_name', 'sumOfTotalSales')
            ->orderBy('publisher_total_sale','desc')
            ->get();

我将如何正确地改造?

2 个答案:

答案 0 :(得分:1)

如果您打算使用Bllim laravel包来生成数据表(它可以很好地工作)。您的查询无法正常工作。

您需要将查询传递给datatables包,如包的文档中所述。不要通过收藏。

通过在查询中包含get(),您将返回一个集合 - 这将失败。

你的方法应该是:

$data = DB::table(DB::raw('reports_summary, SELECT SUM(sale_total) AS sumOfTotalSales FROM     reports_summary) as subTotalSales'))    
->selectRaw('publisher_name, sunOfTotalSales, sum(sales) as sales, sum(comission) as comission, sum(sale_total) as publisher_total_sale')
->where('campaign',$campaign)
->groupBy('publisher_name', 'sumOfTotalSales')
->orderBy('publisher_total_sale','desc')

return Datatables::of($data)->make();

这会产生一个在客户端数据表中使用的正确格式化的json。确保您有一个指向包含此代码的函数的路由或在闭包中使用它,然后在服务器端脚本中使用该路由。

答案 1 :(得分:0)

我会使用DB视图,让laravel可以像使用任何表一样使用它。

但是,这是如何使用查询构建器执行此操作:

DB::table(DB::raw('reports_summary, SELECT SUM(sale_total) AS sumOfTotalSales FROM reports_summary) as subTotalSales'))    
 ->selectRaw('publisher_name, sunOfTotalSales, sum(sales) as sales, sum(comission) as comission, sum(sale_total) as publisher_total_sale')
 ->where('campaign',$campaign)
 ->groupBy('publisher_name', 'sumOfTotalSales')
 ->orderBy('publisher_total_sale','desc')
 ->get();