我正在尝试实现多对多的关系以实现授权模块。正如symfony所建议的那样,我正在尝试将两个表用户和角色用于多对多的实现。我已经编写了一个元数据文件,我正在尝试使用它来生成数据库模式。
以下是我的元数据文件。
VmsUsers.orm .xml
<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="Office\DigitxpBundle\Entity\VmsUsers" table="vms_users" >
<id name="id" type="integer" column="id">
<generator strategy="IDENTITY"/>
</id>
<field name="username" type="string" column="username" length="20" nullable="false"/>
<field name="salt" type="string" column="salt" length="20" nullable="true"/>
<field name="password" type="string" column="password" length="20" nullable="false"/>
<field name="email" type="string" column="email" length="20" nullable="false"/>
<field name="isActive" type="boolean" column="is_active" nullable="false"/>
<many-to-many field="userRoles" target-entity="Role">
<cascade>
<cascade-all/>
</cascade>
<join-table name="user_role">
<join-columns>
<join-column name="roles" referenced-column-name="id" nullable="false" unique="false" />
</join-columns>
<inverse-join-columns>
<join-column name="user" referenced-column-name="id" column-definition="INT NULL" />
</inverse-join-columns>
</join-table>
</many-to-many>
</entity>
</doctrine-mapping>
当我尝试运行时
doctrine:schema:update --force
我喜欢
[Doctrine\DBAL\Schema\SchemaException]
The table with name 'vms1.role' already exists.
但是我的数据库没有角色表。我不知道导致这个错误的原因是什么?知道如何解决这个问题吗?非常感谢提前。
答案 0 :(得分:2)
您可能需要更改此行:
<join-table name="role">
到
<join-table name="users2role">
这是一个连接表 - 关系中的第三个表。
答案 1 :(得分:0)
尝试重命名为roles
:
<entity name="Office\DigitxpBundle\Entity\Role" table="roles">