我的MySQL数据库中有三个表,如下所示:
CREATE TABLE `role` ( `id` int(10), `name` varchar(50), `order` tinyint(3) ); CREATE TABLE `user` ( `id` int(10), `username` varchar(50), `password` 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`) REFERENCES `role` (`id`), CONSTRAINT `user_role_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) );
注意:我从那些表中删除了一些定义部分,如AUTO_INCREMENT,因此只是为了保持模式更简单。
我的问题是,我需要将这些表映射到实体类,如User
和Role
,但我不知道如何管理order
表中的user_role
列以及如何在实体中管理这些关系。
我的第一个猜测是:
档案User.php
use Doctrine\ORM\Mapping as ORM; use Doctrine\Common\Collections\ArrayCollection; /** * User entity. * * @ORM\Entity * @ORM\Table(name="user") */ class User { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue * * @var integer */ protected $id; /** * @ORM\ManyToMany(targetEntity="Role", inversedBy="users") * @ORM\JoinTable(name="user_role") * * @var Role[] */ protected $roles; /** * @ORM\Column(type="string") * * @var string */ protected $username; /** * @ORM\Column(type="string") * * @var string */ protected $password; public function __construct() { $this->roles = new ArrayCollection; } }
档案Role.php
use Doctrine\ORM\Mapping as ORM; use Doctrine\Common\Collections\ArrayCollection; /** * Role entity. * * @ORM\Entity * @ORM\Table(name="role") */ class Role { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue * * @var integer */ protected $id; /** * @ORM\ManyToMany(targetEntity="User", mappedBy="roles") * * @var User[] */ protected $users; /** * @ORM\Column(type="string") * * @var string */ protected $name; public function __construct() { $this->users = new ArrayCollection; } }
这些实体将生成我需要的三个表,但order
表中没有我真正需要的user_role
列。把它放在那里很重要。我也可以创建第三个实体,例如UserRole
,但我不知道那些映射信息会是什么样的。
有什么帮助吗?
你在这里应用了很多关系,所以user_role是关系表。所以它只生成关系列。你可以在你的表中手动添加新列但是当你为用户创建一个角色时它不会填充它不会填充订单列。
你应该创建具有以下属性的新实体userRoleOrder userid,roleid和order使用用户实体和userRoleOrder实体之间的oneToOne关系