猿问

Laravel Eloquent raw query,不带“FROM”参数

我需要通过Laravel Eloquent执行以下SQL查询:


SELECT COUNT(*) FROM 

(

    SELECT COUNT(*) FROM table GROUP BY field_1, field_2

) AS total

如果我能够使用该类来做到这一点,我不会有问题,但是我被迫使用Eloquent类:DB::


Customers::select(DB::raw($sql))->first()->total;

这段代码返回以下 SQL:


SELECT COUNT(*) FROM 

(

    SELECT COUNT(*) FROM table GROUP BY field_1, field_2

) AS total FROM customers

我想摆脱“来自客户”。


鸿蒙传说
浏览 179回答 2
2回答

慕勒3428872

您可以在 Eloquent 中使用子查询,例如:DB::select(function ($query) {     $query->selectRaw('COUNT(*) AS total')         ->from('table')         ->groupBy('field_1');         ->groupBy('field_2'); }, 'table')->count('total');

MYYA

为此使用Eloquent确实没有意义。Customers::selectRaw('count(*)')->fromSub(function ($subquery) {    $subquery->selectRaw('count(*)')    ->from('table')    ->groupBy(['field1','field2']);}, 'total')->get();在控制台中运行此命令会得到以下结果:--> use App\User; User::selectRaw('count(*)')->fromSub(function ($subquery) {    $subquery->selectRaw('count(*)')    ->from('table')    ->groupBy(['field1','field2']);}, 'total')->toSql();=> "select count(*) from (select count(*) from `table` group by `field1`, `field2`) as `total`"你会注意到我使用了自己的模型。这就是我的意思,即使用雄辩是没有意义的。从调用或其任何变体(在本例中)的那一刻起,您就服从于查询生成器。在这种情况下,您甚至不需要调用模型的表。from()fromSub
随时随地看视频慕课网APP
我要回答