【发布时间】:2015-03-27 19:28:03
【问题描述】:
我是学说实体的新手,但我有一个用户表和一个角色表,并且角色使用位掩码链接到用户。像这样
+----+----------+------+
| id | username | role |
+----+----------+------+
| 1 | admin | 1022 |
+----+----------+------+
+----+------------+------------+
| id | role | permission |
+----+------------+------------+
| 1 | ROLE_ADMIN | 2 |
| 2 | ROLE_DEV | 4 |
+----+------------+------------+
如何设置我的用户实体类来加载User::$roles 属性,以便Symfony 可以使用User::getRoles() 函数检索它们?最好通过 Role 实体的加载和数组。
相当于这个:
SELECT r.*
FROM user u
LEFT JOIN role r
ON (u.role & r.permission)
WHERE u.id = :id
【问题讨论】:
-
位字段是一种可怕的数据存储方式,尤其是因为掩码是不可分割的(索引是基于完整值的 B 树,而不是单个位)并且无法强制执行引用完整性。如果您绝对必须这样做,那么至少考虑 MySQL 的
SET数据类型(它作为表面下的位字段实现,但提供了一个人性化的 API,通过该 API 可以通过名称;也可以在连接条件中使用FIND_IN_SET())。
标签: php mysql symfony doctrine-orm