两个表,两个关系

时间:2016-03-09 12:23:37

标签: mysql database symfony doctrine-orm fosuserbundle

我有两张桌子;代理商和用户。

在大多数情况下,用户将属于代理商,否则将为空。这种关系非常简单,我在用户实体类/表中有一个可以为null的agency_id列/属性。

代理商还必须拥有管理员用户。代理商可以拥有多个管理员用户。我正在努力模仿这种关系。

如何在实体类/数据库表中表示第二个关系?我正在使用Doctrine 2(MySQL),Symfony 3和FOSUserbundle。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您应该能够使用Doctrine与OneToMany关系进行建模。用户和管理员本质上都是他们的关系(至少如果一个用户只能管理一个代理,否则这需要是一个ManyToMany引用)。

有关Doctrine Associations的信息可以在这里找到:

http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/association-mapping.html

以下是一些应该显示关联的未经测试的代码:

/**
 * @ORM\Entity
 */
class Agency {
    /**
     * @ORM\OneToMany(targetEntity="User", mappedBy="agency")
     *
     * @var $users \Doctrine\Common\Collections\Collection
     */
     protected $users;

     /**
     * @ORM\OneToMany(targetEntity="User", mappedBy="adminOfAgency")
     *
     * @var $users \Doctrine\Common\Collections\Collection
     */
     protected $admins;

     public function __construct() {
          $this->users = new \Doctrine\Common\Collections\ArrayCollection();
          $this->admins = new \Doctrine\Common\Collections\ArrayCollection();
     }

}

/**
 * @ORM\Entity
 */
class User extends \FOS\UserBundle\Entity\User {
    /**
     * @ORM\ManyToOne(targetEntity="Agency", inversedBy="users")
     * @JoinColumn(name="agency_id", referencedColumnName="id")
     */
     protected $agency;

     /**
     * @ORM\ManyToOne(targetEntity="Agency", inversedBy="admins")
     * @JoinColumn(name="admin_of_agency_id", referencedColumnName="id")
     */
     protected $adminOfAgency;

}