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

Laravel Eloquent如何查询长度为指定值的数组字段记录

问题说明

需要统计bullets数组字段中,数组长度恰好为5的记录总数。原有查询使用LENGTH()函数做判断,该函数仅计算字段值的字符/字节长度,无法识别数组元素个数,因此返回结果错误。原有错误代码如下:

$vcount = Variation::where('user_id', user_id)->whereRaw('LENGTH(bullets) = 5')->count();
正确实现方法

根据bullets字段的存储格式,选择对应方案:

  • 如果bullets是MySQL原生JSON类型字段(Laravel模型中配置了array/json类型 cast)
    直接使用MySQL提供的JSON_LENGTH()函数替换原有的LENGTH()即可,该函数会返回JSON数组的元素个数:

    $vcount = Variation::where('user_id', $user_id)
        ->whereRaw('JSON_LENGTH(bullets) = 5')
        ->count();
    

    提示:如果数组是嵌套在JSON结构的某个子路径下,需要给JSON_LENGTH()传入第二个路径参数,例如存放在content节点下的数组要写为JSON_LENGTH(bullets, '$.content')。

  • 如果bullets是通过PHP序列化后以字符串形式存储(非JSON格式)
    数据库层面无法直接识别序列化字符串的数组结构,可先取出对应字段值,通过Laravel集合方法做统计:

    $vcount = Variation::where('user_id', $user_id)
        ->pluck('bullets')
        ->filter(fn($item) => is_array($item) && count($item) === 5)
        ->count();
    

    注意:该方案会把符合user_id条件的所有记录的bullets字段加载到内存,如果匹配的记录量级超过10万,会产生较高内存占用,优先建议将字段调整为JSON类型使用第一种方案查询,性能更好。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:06:31