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

Laravel Eloquent Builder绑定字符串丢失前导零问题求助

问题

我需要查询所有包含带前导零子串(示例:'02549')的结果。直接使用以下代码能生成正确SQL:

$code = '02549';

Nomenclature::where('code', 'like', '%' . $code . '%')->get();

对应的SQL为:

select * from `nomenclatures` where `code` like '%02549%'

但使用when条件构建器时:

Nomenclature::when(true, function($query, $code) {
    $query->where('code', 'like', '%' . $code . '%');
})->get();

生成的SQL丢失了前导零,变为:

select * from `nomenclatures` where `code` like '%1%'

请问这是什么原因?

原因分析与解决办法

核心原因

when方法的闭包参数接收的第二个值不是你外部定义的$code变量,而是when第一个参数传入的true。PHP会把布尔值true自动转换为整数1,拼接后就变成了%1%,直接丢失了原有的前导零。

解决办法

要让闭包能访问外部的$code变量,必须用use关键字把变量导入闭包作用域:

$code = '02549';

Nomenclature::when(true, function($query) use ($code) {
    $query->where('code', 'like', '%' . $code . '%');
})->get();

修改后闭包就能正确获取到'02549'的值,生成的SQL也会恢复正确的匹配规则。

内容的提问来源于stack exchange,提问作者Sanya H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:42:03