【问题标题】:Query to get all employees which are not assigned to a particular job查询以获取未分配到特定工作的所有员工
【发布时间】:2023-03-12 04:26:01
【问题描述】:

此查询需要选择名字或姓氏包含 $term 字符串的员工,但还要检查这些员工是否已分配给该职位,并仅返回那些未分配给该职位的员工。我正在使用一个employee_job 数据透视表。照原样,查询甚至返回那些已经分配给 jobid 并且在数据透视表中有记录的员工。

 $employees = 
    Employee::where(function($query) use ($term) {
                    $query->where('firstname', 'LIKE', '%' . $term . '%')
                          ->orWhere('lastname', 'LIKE', '%' . $term . '%'); })
              ->whereHas('jobs', function($query) use ($jobid) { $query->where('jobs.id','!=',$jobid); })
              ->take(5)->get();

我可以告诉错误是因为它不检查具有 jobid 的工作的计数是否为 0,而是返回任何具有 jobid 不匹配的其他工作的任何员工,即使他们有工作匹配jobid。

我需要这样的东西

$query->where('jobs.id',$jobid)->count() == 0; 

【问题讨论】:

    标签: laravel eloquent laravel-query-builder


    【解决方案1】:

    您正在寻找whereDoesntHave(),而不是whereHas()

    $employees = Employee::where(function($query) use ($term) {
            $query->where('firstname', 'LIKE', '%' . $term . '%')
                ->orWhere('lastname', 'LIKE', '%' . $term . '%');
        })
        ->whereDoesntHave('jobs', function($query) use ($jobid) {
            $query->where('jobs.id', $jobid);
        })
        ->take(5)
        ->get();
    

    这将返回没有与给定职位 ID 匹配的职位的员工。

    【讨论】:

    • 谢谢。不在数据库中:查询构建器指南 :( 可能应该查看 API 文档
    • @LaserBeak 是的。有大量可用的功能不在一般文档中。很高兴它有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    相关资源
    最近更新 更多