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

Laravel Eloquent查询逗号分隔access_users字段匹配登录用户ID的方法

Eloquent 逗号分隔权限字段查询方案

表结构说明

  • 用户表 table_users
idname
1Jhon Doe
2Jhon Doe
3Jhon Doe
4Jhon Doe
  • 文件表 table_files(access_users 为varchar类型,存储逗号分隔的可访问用户ID)
idfile_nameaccess_users
1exmp.xls1,2,3
2other.xls1,3
3logo.png2,3,4

需求说明

当前登录用户ID为2,查询table_files中access_users包含当前用户ID的所有file_name,期望返回结果:

exmp.xls
logo.png

实现代码

使用MySQL原生FIND_IN_SET函数实现精准匹配,避免LIKE匹配时出现ID部分重合的错误(比如ID为2误匹配到12、22这类值)。

Eloquent 查询写法

先创建对应TableFile模型关联table_files表,查询代码如下:

// 实际业务中可替换为 auth()->id() 获取当前登录用户ID
$currentUserId = 2;
$fileNames = \App\Models\TableFile::select('file_name')
    ->whereRaw("FIND_IN_SET(?, access_users) > 0", [$currentUserId])
    ->pluck('file_name');

// 输出数组格式结果调用 $fileNames->toArray() 即可

对应原生SQL

SELECT `file_name` FROM `table_files` WHERE FIND_IN_SET('2', `access_users`) > 0;

优化建议

当前用逗号分隔存储关联ID的设计不符合数据库范式,数据量较大时查询效率很低,后续建议改为中间表存储文件和用户的权限关联关系,查询、扩展性能都会更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:15:03