【发布时间】:2019-08-15 11:03:03
【问题描述】:
我有一个有效的 SQL 查询,这是 stackoverflow 成员慷慨赠予我的,它可以在 Laravel 中运行:
$actives = DB::select('SELECT a.* ,COALESCE(b.sold,0), sold
FROM ( SELECT * FROM products p
WHERE p.product_type_id = 1
AND DATE(p.visible_date) <= ?
AND p.active = 1
AND (p.end_date >= ? or p.end_date IS NULL) ) a
LEFT JOIN ( SELECT product_id , SUM(quantity) sold
FROM order_items oi JOIN orders o
ON o.id = oi.order_id
AND o.paid is not null
GROUP BY product_id ) b
ON b.product_id = a.id', [Carbon::now(), Carbon::now()]);
但这会返回一个数组,我正在寻找一个集合。我不能使用selectRaw,因为该方法总是在查询末尾添加FROM tablename。
我已将 a 和 b 分成子查询,这两个都有效:
$a = DB::table('products')
->where('product_type_id', 1)
->whereDate('visible_date', '<=', Carbon::now())
->where('active', true)
->where(function ($query) {
$query->where('end_date', '>=', Carbon::now())
->orWhere('end_date', null);
});
$b = DB::table('order_items')
->selectRaw('product_id , SUM(quantity) sold')
->join('orders', 'orders.id', '=', 'order_items.order_id')
->whereNotNull('orders.paid')
->groupBy('product_id');
Eloquent 查询构建器有一个 leftJoinSub 函数,但文档似乎表明它只适用于将一个查询与一个子查询连接起来,而我似乎需要在两个子查询上连接一个新查询。
有人知道如何将原始 SQL 放入 Eloquent 中,以便我返回 Products 集合而不是数组吗?
【问题讨论】:
标签: laravel laravel-5 eloquent