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

Laravel中实现成员ID的精确大小写敏感查询需求

解决方案

要实现完全匹配且大小写敏感的ID查询,你需要对代码做两处关键调整:

1. 替换模糊匹配为大小写敏感的精确匹配

将原来的LIKE模糊查询,改为使用BINARY关键字强制MySQL进行二进制字节级的精确比较(区分大小写),同时去掉通配符%,确保只有输入内容与数据库中id_no字段完全一致时才返回结果。

2. 修正查询构建器的执行逻辑

原来的代码在when闭包内直接调用get(),会导致当$id为空时,$member是查询构建器实例而非集合,调用isEmpty()会报错。需要将get()移到when方法外,确保$member始终是集合对象。

优化后的完整代码

public function id_check(Request $request)
{
    $id = $request->id;

    $member = Member::when($id, function ($query, $id) {
        // 使用BINARY强制大小写敏感的精确匹配
        return $query->whereRaw('BINARY id_no = ?', [$id]);
    })->get();

    if ($member->isEmpty()) {
        return view('home.notfound');
    } else {
        return view('home.id_verification', [
            'member' => $member
        ]);
    }
}

关键说明

  • BINARY关键字:让MySQL直接比较字符串的二进制值,大小写不同的字符会被判定为不相等(比如"A"和"a"的二进制值不同),满足你对大小写敏感的要求。
  • 集合一致性:get()移到when外后,无论$id是否存在,$member都是Collection实例,isEmpty()方法可以正常调用。

如果希望当$id为空时直接返回空集合(而非所有成员),可以补充when的第三个参数闭包:

$member = Member::when($id, function ($query, $id) {
    return $query->whereRaw('BINARY id_no = ?', [$id]);
}, function ($query) {
    // $id为空时返回空集合
    return $query->whereRaw('1 = 0');
})->get();

内容的提问来源于stack exchange,提问作者Bernado Luis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:07:59