Laravel Excel导入时Eloquent集合二次where大小写敏感如何解决
解决方案
你遇到的大小写敏感问题,本质是Laravel集合的where方法默认使用严格比较逻辑,且PHP原生字符串对比本身区分大小写导致的。以下是两种低资源消耗的实现方案,都不需要额外查询数据库。
方案一:集合索引优化(推荐,性能最高)
该方案将预查询的集合直接转为小写工号为键的索引结构,单次构造后后续查找复杂度为O(1),最适合Excel导入这类大量数据匹配的场景。
修改构造方法代码:
public function __construct() { $this->employees = EmployeeInformation::where('company_id', Auth::user()->company_id) ->select('id', 'employee_number') ->get() // 统一将工号转为小写作为集合的键,建立直接索引 ->keyBy(fn($employee) => strtolower($employee->employee_number)); }
查找时的调用代码:
// 输入的工号统一转小写后直接通过键获取对应记录 $employee = $this->employees->get(strtolower($inputEmployeeNumber));
方案二:不修改原有集合结构
如果不想改动预加载集合的原有结构,可以使用集合的first()方法自定义匹配逻辑:
$targetNumber = strtolower($inputEmployeeNumber); $employee = $this->employees->first(fn($item) => strtolower($item->employee_number) === $targetNumber);
注意:该方案每次查找需要遍历整个集合,员工量级较大时性能低于方案一,但仍远高于逐行查询数据库的开销。
内容的提问来源于stack exchange,提问作者kgcusi
相关产品推荐
相关产品推荐

