Laravel 查询以获取未分配到特定工作的所有员工

Laravel 查询以获取未分配到特定工作的所有员工,laravel,eloquent,laravel-query-builder,Laravel,Eloquent,Laravel Query Builder,此查询需要选择其名字或姓氏包含$term字符串的员工,但还需要检查这些员工是否已分配给该作业,并仅返回未分配给该作业的员工。我使用的是员工工作透视表。按原样,查询甚至返回那些已经分配给jobid并且在pivot表中有记录的员工 $employees = Employee::where(function($query) use ($term) { $query->where('firstname', 'LIKE', '%' . $term

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

 $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; 

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


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

谢谢。不在数据库:查询生成器指南中:(可能应该查看API)docs@LaserBeak是的。有很多函数是通用文档中没有的。很高兴它有帮助。
$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();