用数组列过滤雄辩的集合

时间:2019-08-06 22:40:29

标签: laravel eloquent

我正在尝试通过一个数组来过滤雄辩的模型。我想要整个模型,其中特定的列在其中包含某个元素(在数组中)。

我已经尝试过使用:-

$admins = User::where('role', ['admin'])->paginate(15);

角色是作为数组的列,我想过滤整个集合,其中该数组列包含'admin'的字符串元素,但这将返回一个空集合。 enter image description here

1 个答案:

答案 0 :(得分:1)

根据您的评论,您正在尝试为用户提供角色/权限系统。

推荐的解决方案

我建议您使用spatie/laravel-permissionsJosephSilber/bouncer之类的外部软件包,该软件包与laravel集成良好。

如果您想自己实现它

但是,Laravel(或者我最好说MySQL / PostgreSQL)支持json字段类型,这可能会实现类似您所寻找的东西。我不确定的部分是在数组中寻找一个值。

您可以在文档here中看到所有可用的JSON字段。

无论如何,如果您想在没有有限的JSON支持的情况下自己实现该功能,我将重组数据库以包含以下表:

  

用户(您拥有的所有字段,但角色和权限除外)
   user_role (id,user_id,role_id)
  角色(ID,名称,显示名称)
   user_permission (用户ID,用户ID,权限ID)
  权限(ID,名称,显示名称)

使用该数据库,您只需为用户,角色和权限模型设置正确的关系。

最后一种方法是这些程序包在内部或多或少地处理其内容(角色/权限)的方式,这绝对是一种更好的处理用户表中JSON列的方法。