【发布时间】:2014-03-10 22:20:28
【问题描述】:
有没有办法把这个查询翻译成 Laravel eloquent 格式?
SELECT TEMP.A, COUNT(*) AS Total FROM
(SELECT A FROM TABLE WHERE B='something' GROUP BY C)
AS TEMP GROUP BY TEMP.A
我在这里要做的是根据 C 的不同记录获取 A 的计数,该记录属于某些 where 子句。
subselect 语句也是一个雄辩的对象,它是由用户在过滤器上输入构建的,以获取 C 的不同记录。 我试图这样做,假设子选择雄辩的对象是 $query
$query2->DB::connection()->table(function($_query) use ($query){
$_query = $query;
$_query->addSelect('A')->where('B','=','something')->groupBy('C')->get();
})->addSelect('A')->addSelect(DB::raw('COUNT(*) as Total'))->groupBy('A')->get();
但它似乎不起作用,有人建议在 ->table() 中使用 DB::raw,但问题是 subselect 语句实际上也是一个动态构建的 eloquent 语句。
非常感谢您提前提供的帮助
【问题讨论】:
-
除非您绝对需要与数据库无关,否则无需强制执行更复杂的 SQL 查询的“雄辩方式”。如果不需要,不要过度复杂化你的代码。使用绑定运行普通的原始查询,或者根据需要混合和匹配一些 Eloquent 和一些原始查询。