Я пытаюсь добавить сущности и отношения Doctrine к моей существующей схеме базы данных, но у меня возникают некоторые проблемы.Doctrine ManyToMany вопросы проблем
У меня есть 4 таблицы:
+-------------+ +-----------+ +-----------------+ +-------------------+
| customers | | acl_roles | | acl_permissions | | acl_customer_role |
--------------- ------------- ------------------- ---------------------
| customer_id | | id | | role_id | | customer_id |
+-------------+ | name | | resource_id | | acl_role_id |
+------------ | flags | +--------------------
+------------------
В моих ACL клиенты могут иметь множество ролей и каждая роль может иметь много разрешений. Отображение клиентов/роли выполняется через таблицу acl_customer_role
.
У меня в настоящее время возникают проблемы, связанные с этим отношением. Это мои структуры (удалены некоторые стандартные аннотации для краткости):
class Customer {
/**
* @ORM\ManyToMany(targetEntity="AclRole", cascade="persist")
* @ORM\JoinTable(name="acl_customer_role",
* joinColumns={@ORM\JoinColumn(name="acl_role_id", referencedColumnName="customer_id")}
*)
*/
protected $roles;
}
class AclRole {
/**
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $id;
}
Как вы можете видеть, в моей сущности клиента я определение $roles
. Это отношения ManyToMany, поскольку многие роли могут принадлежать многим клиентам. Я настраиваю свою таблицу соединений как acl_customer_role
, и я указываю столбцы, в которых должно быть соединение. Тем не менее, я получаю следующее сообщение об ошибке:
PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'acl_customer_role.aclrole_id' in 'on clause'' in vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:641
Это кажется, что запрос доктрины является пытается присоединиться на 'acl_customer_role.aclrole_id'
, которые, очевидно, не существует.
Как я могу правильно определить отношения?
UPDATE:
Почему-то кажется, что доктрина модифицирует свое имя столбца. Когда я укажу acl_role_id
, Doctrine вычеркивает первый знак подчеркивания и предполагает, что имя столбца равно aclrole_id
(как показано в сообщении об ошибке в вопросе выше). Однако, когда я добавляю два символа подчеркивания, такие как acl__role_id
, он оставляет все подчеркивания там и дает почти такую же ошибку, кроме того, что теперь он не может присоединиться к acl__role_id
.
Я довольно много в недоумении ..