У меня есть три таблицы в моей базе данных 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
но я не знаю, какой будет тогда картографическая информация.
Любая помощь, пожалуйста?
Вы подали заявку здесь manyTomany отношения, так что user_role — это таблица отношений. Поэтому она будет генерировать только столбцы отношений. Вы можете добавить новый столбец вручную в таблицу, но он не будет заполнен, когда вы создадите роль для пользователя, он не заполнит столбец заказа.
Вы должны создать новую сущность userRoleOrder со следующими свойствами userid, roleid и order
использование один к одному связь между сущностью пользователя и сущностью userRoleOrder
Других решений пока нет …