首页 > 解决方案 > Laravel Raw 选择,仅选择 count(*) 作为聚合

问题描述

我正在尝试使用DB构建器从数据库中检索一些数据:

DB::table('g_r_n_s')
   ->leftJoin('g_r_n_items', 'g_r_n_s.id', '=', 'g_r_n_items.id')
   ->leftJoin('purchase_l_p_o_items', 'purchase_l_p_o_items.id', '=', 'g_r_n_items.purchase_lpo_item_id')
   ->leftJoin('supplier_quotation_items', 'supplier_quotation_items.id', '=', 'purchase_l_p_o_items.quotation_item_id')
   ->leftJoin('supplier_payments', 'supplier_payments.grn_id', '=', 'g_r_n_s.id')
   ->leftJoin('supplier_quotations', 'supplier_quotations.id', '=', 'supplier_quotation_items.supplier_quotation_id')
   ->where('supplier_quotations.payment_type', 'credit')
   ->select('g_r_n_s.*', DB::raw('DATEDIFF(now(), g_r_n_s.date) AS days_diff'))
   ->where(DB::raw('DATEDIFF('. $now .', g_r_n_s.date)'), '>=', 'supplier_quotations.credit_period')
   ->groupBy('g_r_n_s.id')->orderBy('days_diff', 'desc')->paginate(25);

执行的查询是错误的,它只count(*) as aggregate从表中选择。

SELECT    COUNT(*) AS AGGREGATE 
FROM      `g_r_n_s` 
LEFT JOIN `g_r_n_items` 
       ON `g_r_n_s`.`id` = `g_r_n_items`.`id` 
LEFT JOIN `purchase_l_p_o_items` 
       ON `purchase_l_p_o_items`.`id` = `g_r_n_items`.`purchase_lpo_item_id` 
LEFT JOIN `supplier_quotation_items` 
       ON `supplier_quotation_items`.`id` = `purchase_l_p_o_items`.`quotation_item_id` 
LEFT JOIN `supplier_payments` 
       ON `supplier_payments`.`grn_id` = `g_r_n_s`.`id` 
LEFT JOIN `supplier_quotations` 
       ON `supplier_quotations`.`id` = `supplier_quotation_items`.`supplier_quotation_id` 
WHERE     `supplier_quotations`.`payment_type` = ? 
AND       DATEDIFF(2020-01-01, g_r_n_s.date) >= ? 
GROUP BY  `g_r_n_s`.`id` [credit, supplier_quotations.credit_period]

我究竟做错了什么?

标签: mysqllaraveleloquent

解决方案


推荐阅读