[求助] 如何在尽可能少使用 DB::raw () 的前提下通过 Eloquent ORM 实现下列 SQL 语句?

目标:查出职员表中 用户只在一个在职企业担任管理员 的记录,并只取出企业 ID < 1000 的部分。
注意:用户只在企业 ID < 1000 中的一个企业在职担任管理员,但也在企业 ID >= 1000 的企业中在职担任管理员的,均不在输出结果之内。另外,是否离职担任管理员( is_admin = 1 and deleted_at is not null )不影响查询结果。
以下为 SQL 语句:

SELECT
    * 
FROM
    `staff` 
WHERE
    `id` IN ( SELECT `id` FROM `staff` WHERE `is_admin` = 1 AND `deleted_at` IS NULL GROUP BY `user_id` HAVING count( 1 ) = 1 ) 
    AND company_id < 1000

如果 SQL 语句还有优化空间,欢迎补充。

Long2Ge
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1
    Staff::whereIn('id', function($query) {
        $query->select('id')->from('staff')
        ->where('is_admin', 1)
        ->whereNotNull('deleted_at')
        ->groupBy('user_id')
        ->havingRaw('COUNT(1)  =  ?', 1);
    })->where('company_id', '<', 1000 );

大概是这样写,你试试

3年前 评论
long2ge (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!