You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel:如何从mergedEmployees中获取removedEmployees?当前diff代码失效

问题分析与解决方案

你当前代码的问题出在$mergedEmployees->diff($uniqueEmployees)的逻辑错误:
diff方法的作用是返回第一个集合存在,但第二个集合不存在的元素。而$uniqueEmployees是$mergedEmployees去重后的结果,$mergedEmployees里的所有元素都能在$uniqueEmployees中找到(unique仅保留每个元素的首个实例),所以这个调用会返回空集合,无法得到你想要的重复员工(即被unique过滤掉的项)。

正确的实现方式

方式一:统计重复ID筛选重复员工

通过统计员工ID的出现次数,找出重复出现的员工实例:

$employees1 = Employee::where('employment_status', '<>', 'SEPARATED')
    ->where('client_code_1', $client->client_code)
    ->where('position', $grouping->position)
    ->where('billable_rate', $grouping->billable_rate)
    ->get();

$employees2 = Employee::where('employment_status', '<>', 'SEPARATED')
    ->where('client_code_2', $client->client_code)
    ->where('position', $grouping->position)
    ->where('billable_rate', $grouping->billable_rate)
    ->get();

$mergedEmployees = $employees1->merge($employees2);

// 统计每个员工ID的出现次数
$idCounts = $mergedEmployees->countBy('id');
// 筛选出出现次数大于1的员工ID
$duplicateIds = $idCounts->filter(fn($count) => $count > 1)->keys();
// 获取所有重复出现的员工实例(包含多次出现的条目)
$removedEmployees = $mergedEmployees->filter(fn($emp) => $duplicateIds->contains($emp->id));

// 若只需每个重复员工的唯一实例,可追加unique():
// $removedEmployees = $mergedEmployees->filter(fn($emp) => $duplicateIds->contains($emp->id))->unique();

方式二:直接取两个集合的交集

因为合并后的重复员工,本质是同时存在于employees1和employees2中的员工,所以可以直接用交集方法:

$employees1 = Employee::where('employment_status', '<>', 'SEPARATED')
    ->where('client_code_1', $client->client_code)
    ->where('position', $grouping->position)
    ->where('billable_rate', $grouping->billable_rate)
    ->get();

$employees2 = Employee::where('employment_status', '<>', 'SEPARATED')
    ->where('client_code_2', $client->client_code)
    ->where('position', $grouping->position)
    ->where('billable_rate', $grouping->billable_rate)
    ->get();

// 直接获取两个集合共有的员工(即合并后重复的部分)
$removedEmployees = $employees1->intersect($employees2);

这个方式更高效,不需要先合并再处理,直接找出两个查询结果的重叠部分。

内容的提问来源于stack exchange,提问作者Jimwel Dizon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 06:03:29