查询以获取所有未分配给特定工作的员工
Query to get all employees which are not assigned to a particular job
此查询需要 select 名字或姓氏包含 $term 字符串的员工,然后还要检查这些员工是否已分配到该职位,并且 return 仅检查那些没有分配给工作。我正在使用 employee_job 枢轴 table。事实上,查询 return 甚至是那些已经分配给 jobid 并在数据透视 table.
中有记录的员工
$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,而是 returns 任何拥有 jobid 不匹配的其他工作的员工,即使他们的工作与 jobid 匹配。
我需要这样的东西
$query->where('jobs.id',$jobid)->count() == 0;
您正在寻找 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();
这将 return 没有工作匹配给定工作 ID 的员工。
此查询需要 select 名字或姓氏包含 $term 字符串的员工,然后还要检查这些员工是否已分配到该职位,并且 return 仅检查那些没有分配给工作。我正在使用 employee_job 枢轴 table。事实上,查询 return 甚至是那些已经分配给 jobid 并在数据透视 table.
中有记录的员工 $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,而是 returns 任何拥有 jobid 不匹配的其他工作的员工,即使他们的工作与 jobid 匹配。
我需要这样的东西
$query->where('jobs.id',$jobid)->count() == 0;
您正在寻找 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();
这将 return 没有工作匹配给定工作 ID 的员工。