为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
鸿蒙传说 2022-08-05 16:42:00
我需要通过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我想摆脱“来自客户”。
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

您可以在 Eloquent 中使用子查询,例如:

DB::select(function ($query) {
    $query->selectRaw('COUNT(*) AS total')
        ->from('table')
        ->groupBy('field_1');
        ->groupBy('field_2');
}, 'table')->count('total');


查看完整回答
反对 回复 2022-08-05
?
MYYA

TA贡献1868条经验 获得超4个赞

为此使用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`, `field

2`) as `total`"

你会注意到我使用了自己的模型。这就是我的意思,即使用雄辩是没有意义的。从调用或其任何变体(在本例中)的那一刻起,您就服从于查询生成器。在这种情况下,您甚至不需要调用模型的表。from()fromSub


查看完整回答
反对 回复 2022-08-05
  • 2 回答
  • 0 关注
  • 178 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号