【发布时间】:2018-09-13 05:50:00
【问题描述】:
我有一个查询,我尝试将其转换为 laravel 查询生成器样式。 但是我没能成功。
这是我的查询
SELECT
count(*)
FILTER (WHERE order_status_id IN (5, 4, 15)) AS ready_for_delivery,
count(*)
FILTER (WHERE order_status_id IN (6)) AS out_for_delivery,
count(*)
FILTER (WHERE order_status_id IN (4, 10, 9, 12, 7)) AS completed_order,
count(*)
FILTER (WHERE order_status_id IN (11, 16, 17, 13)) AS waiting_for_cancellation_return_change
FROM order_item_histories;
这是我从http://www.midnightcowboycoder.com/ 得到的,这显然行不通。但这是一个起点
DB::table('order_item_histories')
->selectSub('count', 'ready_for_delivery')
->selectSub('FILTER', 'ready_for_delivery')
->selectSub('count', 'out_for_delivery')
->selectSub('FILTER', 'out_for_delivery')
->selectSub('count', 'completed_order')
->selectSub('FILTER', 'completed_order')
->selectSub('count', 'waiting_for_cancellation_return_change')
->selectSub('FILTER', 'waiting_for_cancellation_return_change')
->get();
这个查询有效,但它只是原始的。我知道没有伤害,但是..
$aa = DB::table('order_item_histories')
->select(DB::raw('count(*)
FILTER (WHERE order_status_id IN (5, 4, 15)) AS ready_for_delivery,
count(*)
FILTER (WHERE order_status_id IN (6)) AS out_for_delivery,
count(*)
FILTER (WHERE order_status_id IN (4, 10, 9, 12, 7)) AS completed_order,
count(*)
FILTER (WHERE order_status_id IN (11, 16, 17, 13)) AS waiting_for_cancellation_return_change'))
->get();
【问题讨论】:
-
如果没坏,就不要修了
-
@Ohgodwhy 这是一种方法:)
-
我认为像这样的多个调用会起作用
->selectSub('count(*) FILTER (WHERE order_status_id IN (5, 4, 15))', 'ready_for_delivery'),但在这种情况下编写原始查询完全没问题,只是要小心 SQL 注入
标签: mysql laravel postgresql laravel-query-builder