Сопоставление сопоставленных сущностей с одной сущностью для таблицы соединений (Doctrine 2)

У меня есть три таблицы в моей базе данных MySQL, которая выглядит так:


CREATE TABLE `роль` (
`id` int (10),
`name` varchar (50),
`order` tinyint (3)
); CREATE TABLE `user` (
`id` int (10),
`username` varchar (50),
`пароль` char (60)
); CREATE TABLE `user_role` (
`id` int (10),
`user_id` int (10),
`role_id` int (10),
`order` int (10),
KEY `user_id` (` user_id`),
KEY `role_id` (` role_id`),
CONSTRAINT `user_role_ibfk_1` FOREIGN KEY (` role_id`) ССЫЛКИ `role` (` id`),
CONSTRAINT `user_role_ibfk_2` FOREIGN KEY (` user_id`) ССЫЛКИ `user` (` id`)
);

ПРИМЕЧАНИЕ. Я удалил некоторые части определения из этих таблиц, такие как AUTO_INCREMENT, и просто для упрощения схемы.

Моя проблема в том, что мне нужно сопоставить эти таблицы с классами сущностей, например User а также Role но я не знаю, как управлять order колонка в user_role Таблица и как управлять этими отношениями в сущностях.

Мое первое предположение было:

файл User.php


используйте Doctrine \ ORM \ Mapping в качестве ORM;
использовать Doctrine \ Common \ Collections \ ArrayCollection;

/ **
* Пользовательский объект.
*
* @ORM \ Entity
* @ORM \ Table (name = "user")
* /
класс пользователя
{

/ **
* @ORM \ Id
* @ORM \ Column (type = "integer")
* @ORM \ GeneratedValue
*
* @var integer
* /
защищенный $ id;

/ **
* @ORM \ ManyToMany (targetEntity = "Role", inversedBy = "users")
* @ORM \ JoinTable (name = "user_role")
*
* @var Роль []
* /
защищенные роли;

/ **
* @ORM \ Column (type = "string")
*
* строка @var
* /
защищенный $ username;

/ **
* @ORM \ Column (type = "string")
*
* строка @var
* /
защищенный пароль $; публичная функция __construct ()
{
$ this-> role = new ArrayCollection;
}

}

файл Role.php


используйте Doctrine \ ORM \ Mapping в качестве ORM;
использовать Doctrine \ Common \ Collections \ ArrayCollection;

/ **
* Роль сущности.
*
* @ORM \ Entity
* @ORM \ Table (name = "role")
* /
Роль класса
{

/ **
* @ORM \ Id
* @ORM \ Column (type = "integer")
* @ORM \ GeneratedValue
*
* @var integer
* /
защищенный $ id;

/ **
* @ORM \ ManyToMany (targetEntity = "Пользователь", mappedBy = "роли")
*
* @var Пользователь []
* /
защищенные $ пользователи;

/ **
* @ORM \ Column (type = "string")
*
* строка @var
* /
защищенное $ name; публичная функция __construct ()
{
$ this-> users = new ArrayCollection;
}

}

Эти объекты будут генерировать три таблицы, как мне нужно, но нет order столбец в user_role стол, который мне действительно нужен. Это важно иметь там. Я также мог бы создать третью сущность, называемую, например, UserRole но я не знаю, какой будет тогда картографическая информация.

Любая помощь, пожалуйста?

1

Решение

Вы подали заявку здесь manyTomany отношения, так что user_role — это таблица отношений. Поэтому она будет генерировать только столбцы отношений. Вы можете добавить новый столбец вручную в таблицу, но он не будет заполнен, когда вы создадите роль для пользователя, он не заполнит столбец заказа.

Вы должны создать новую сущность userRoleOrder со следующими свойствами userid, roleid и order
использование один к одному связь между сущностью пользователя и сущностью userRoleOrder

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]