[求助] 如何在尽可能少使用 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
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 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 );

大概是这样写,你试试

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

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