我想使用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();
我将如何正确地改造?
答案 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();