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

Laravel+PostgreSQL下使用UUID的whereIn条件查询报错

问题原因

whereIn() 方法的第二个参数要求传入由单个查询值组成的数组。你当前直接把逗号拼接的多UUID字符串包裹在[$id]中传入,实际生成的数组仅包含1个元素——就是那串带逗号的完整长字符串。
PostgreSQL对UUID类型有严格的格式校验,会把这个传入的长字符串当成单个UUID值解析,自然无法识别合法格式,最终抛出类型不匹配的错误。
你原写法生成的待查询数组实际结构如下:

[
    0 => "2b5e5507-7e01-45fe-b0ed-331135479061,7c816e0f-d6e2-489c-bdce-df064b3e99f9"
]

对应生成的SQL条件等价于where industry_id in ('长串带逗号的字符'),完全不符合UUID查询的格式要求,触发的报错信息为:

SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for type uuid: "2b5e5507-7e01-45fe-b0ed-331135479061,7c816e0f-d6e2-489c-bdce-df064b3e99f9"

修复方案

先把逗号分隔的UUID字符串拆分为独立元素组成的数组,再传入whereIn()即可。
修正后的业务代码:

public function skills($id)
{
    // 拆分逗号分隔的UUID字符串为数组
    $uuidList = explode(',', $id);
    // 若存在参数带多余空格、空值的场景,可以加一步过滤清洗
    // $uuidList = array_filter(array_map('trim', explode(',', $id)));

    $skills = DB::table("industry_skill_sets")
        ->whereIn('industry_id', $uuidList)
        ->pluck("name", "id");
    
    print_r($skills);
    
    exit;
}

拆分后传入的数组结构为:

[
    0 => "2b5e5507-7e01-45fe-b0ed-331135479061",
    1 => "7c816e0f-d6e2-489c-bdce-df064b3e99f9"
]

此时生成的SQL会把每个UUID作为独立的in查询条件,PostgreSQL可以正常识别格式完成查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:51:23