【问题标题】:Laravel 5.6: is it possible to generate following query by Query Builder or Eloquent?Laravel 5.6:是否可以通过 Query Builder 或 Eloquent 生成以下查询?
【发布时间】:2018-12-18 07:12:43
【问题描述】:

我有以下原始查询,是否可以使用 Laravel Query Builder 或 Eloquent 创建它?

SELECT 
SUM(records.per_hub)+SUM(records.additionl_qty) AS qty,
records.cost_price,
(records.cost_price)*(SUM(records.per_hub)+SUM(records.additionl_qty)) AS 
total
FROM
(SELECT 
COUNT(*) AS per_hub,
CEIL(COUNT(*) * 50 / 100) AS additionl_qty,
m.cost_price
FROM
orders o 
LEFT JOIN meals m
ON m.id = o.meal_id
WHERE o.shift_id = 1 
AND o.meal_id = 2 
AND o.city_id = 283 
AND o.restaurant_id = 5 
GROUP BY hub_id) records;

【问题讨论】:

  • 使用DB::select($query);

标签: laravel-5 eloquent subquery laravel-query-builder


【解决方案1】:

作为参考。

$sub_query = DB::table('orders as o')
      ->leftJoin('meals as m','m.id','=','o.meal_id')
      ->where('o.shift_id','=',1)
      ->where('o.meal_id','=',2)
      ->where('o.city_id','=',283)
      ->where('o.restaurant_id', '=', 5)
      ->select(DB::raw('COUNT(*) AS per_hub,CEIL(COUNT(*) * 50 / 100) AS additionl_qty,m.cost_price'))
      ->groupBy('hub_id');

    $main_query = DB::table( DB::raw("({$sub_query->toSql()}) as records") )
             ->select(DB::raw('SUM(records.per_hub)+SUM(records.additionl_qty) AS qty,
                      records.cost_price,
                      (records.cost_price)*(SUM(records.per_hub)+SUM(records.additionl_qty)) AS total'))
             ->get();

【讨论】:

    【解决方案2】:

    是的,可以使用 Laravel Query Builder 创建它,尝试查找 API 文档:https://laravel.com/api/5.6/Illuminate/Database/Query/Builder.html#method_addSelect

    【讨论】:

    • 你能举个例子吗?
    猜你喜欢
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多