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

如何在Laravel中运行含LENGTH()的SQL查询?报未定义函数错误

解决Laravel中调用SQL函数报错的问题

问题原因

你直接在PHP代码里调用了SQL的LENGTH()函数,但PHP本身没有这个内置函数,所以触发**Call to undefined function LENGTH()**错误。Laravel中需要用DB::raw()来包裹SQL原生函数表达式,才能让框架正确解析为SQL语句的一部分。

修正后的代码

场景1:获取计算字段并统计记录数

如果你的需求是查询包含item_stock和计算值的结果,再统计记录总数,代码可以这样写:

public static function itemstockdata($item_user_id)
{
    $items = DB::table('items')
        ->select(
            'item_stock',
            DB::raw('(LENGTH(item_stock) - LENGTH(REPLACE(item_stock, "\"", ""))) / 2 AS quote_count')
        )
        ->where('user_id', '=', $item_user_id)
        ->get();
    
    $count = $items->count();
    return $count;
}

场景2:直接统计满足计算条件的记录数

如果是要筛选出计算值符合特定条件的记录并统计数量(比如计算值大于0),可以用更高效的写法:

public static function itemstockdata($item_user_id)
{
    $count = DB::table('items')
        ->where('user_id', '=', $item_user_id)
        ->whereRaw('(LENGTH(item_stock) - LENGTH(REPLACE(item_stock, "\"", ""))) / 2 > 0')
        ->count();
    
    return $count;
}

关键说明

  • DB::raw()用于将字符串原样作为SQL语句的一部分传入,不会被Laravel转义或解析为PHP代码。
  • whereRaw()可直接传入原生SQL条件,适合复杂的条件判断。
  • 原代码中$get变量未定义,需替换为实际查询后的变量,或直接在查询链末尾调用count()方法提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:05:16