thinkphp6根据id查询指定字段逗号分隔的字符串是否包含该id

问题描述:现有权限表、角色表、用户表三张基础表,根据表组合成常规的权限管理操作。需要根据给出的权限id查询出角色表字段为node_ids数据中是否有该权限id,node_ids字段数据为权限id逗号分隔的字符串数据。

角色表数据如图:


查询结果需求:查找出包含1的所有node_ids字段数据。

从截图中可以得出只有第一条和第二条数据包含了id为1的数据,那么在thinkphp6中如何使用mysql来取出这两条数据呢?

熟悉mysql的应该会想到FIND_IN_SET()

定义:FIND_IN_SET(str,strlist) :  str 要查询的字符串,strlist  需查询的字段,参数以”,”分隔,形式如 (1,2,6,8,10,22);该函数的作用是查询字段(strlist)中是否包含(str)的结果,返回结果为null或记录。

从定义中我们可以得到,通过该函数可以获取到我们需要的数据。

那么在thinkphp6中可以如何使用该函数呢?

在thinkphp6手册中我们可以查询到whereFindInSet快捷查询方法,通过定义可知该方法即FIND_IN_SET。

如此,我们就可以通过thinkphp6提供的查询方法来实现该功能,代码如下:

$list = Db::name('role') ->whereFindInSet('node_ids',1) ->select();

代码释义:查询表名为role,其中node_ids字段字符串数据中包含1的所有数据。

六月初字帖坊小程序 你想要的字帖模板及工具,这里都有!