Propper实体关联与一个实体映射为连接表(Doctrine 2)

问题描述 投票:1回答:1

我的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,因此只是为了保持模式更简单。

我的问题是,我需要将这些表映射到实体类,如UserRole,但我不知道如何管理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,但我不知道那些映射信息会是什么样的。

有什么帮助吗?

php entity-framework orm doctrine-orm
1个回答
0
投票

你在这里应用了很多关系,所以user_role是关系表。所以它只生成关系列。你可以在你的表中手动添加新列但是当你为用户创建一个角色时它不会填充它不会填充订单列。

你应该创建具有以下属性的新实体userRoleOrder userid,roleid和order使用用户实体和userRoleOrder实体之间的oneToOne关系

© www.soinside.com 2019 - 2024. All rights reserved.