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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:42:00