如何在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
相关产品推荐
相关产品推荐

