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

Laravel中SQL拼接first_name和last_name查询fullname报字段不存在错误如何解决

问题排查
  • 你贴出的代码存在基础语法错误:CONCAT('first_name', 'last_name') 中给字段名加了单引号,导致SQL将其识别为字符串常量而非表字段,无法正确拼接两个字段的值。同时闭包内使用的参数$firstName没有在use中引入,属于变量未定义问题。
  • 报错信息显示存在full_name字段不存在的错误,说明你实际运行的代码与贴出的代码不一致,你在查询逻辑的其他位置增加了针对full_name字段的过滤条件,但你的users表中没有该字段,因此触发报错。
  • 报错中的SQL片段LIKE sdfdf%说明参数绑定逻辑存在错误,没有给搜索值加引号,也会导致SQL语法报错。
修复方案

基础修复(直接实现全名搜索)

如果是全等匹配全名:

User::where(function($query) use ($fullName) {
    // 字段不加单引号,中间加空格符合正常全名拼接规则
    $query->whereRaw("CONCAT(first_name, ' ', last_name) = ?", [$fullName]);
})->get();

如果是模糊匹配全名:

User::where(function($query) use ($fullName) {
    $query->whereRaw("CONCAT(first_name, ' ', last_name) LIKE ?", ["%{$fullName}%"]);
})->get();

优化方案(复用搜索逻辑)

可以在User模型中封装查询作用域,避免每次写重复的拼接逻辑:

// 写入 app/Models/User.php 文件中
public function scopeWhereFullName($query, $fullName, $isFuzzy = false)
{
    $concatField = "CONCAT(first_name, ' ', last_name)";
    if ($isFuzzy) {
        return $query->whereRaw("{$concatField} LIKE ?", ["%{$fullName}%"]);
    }
    return $query->whereRaw("{$concatField} = ?", [$fullName]);
}

// 业务代码中直接调用
// 全等匹配
User::whereFullName('张三')->get();
// 模糊匹配
User::whereFullName('张三', true)->get();

另外需要删除你代码中所有直接使用full_name作为查询字段的逻辑,即可解决字段不存在的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:36:04