两张表,两种关系

Two tables, two relationships

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

在大多数情况下,用户将属于代理机构,否则将为空。这种关系很容易建模,我在用户实体 class/table.

中有一个可为空的 agency_id column/property

代理机构还必须有管理员用户。一个机构可以有多个管理员用户。我正在努力模拟这种关系。

如何在实体 classes/database 表中表示第二个关系?我正在使用 Doctrine 2 (MySQL)、Symfony 3 和 FOSUserbundle。

感谢任何帮助。

您应该能够使用 Doctrine 对 OneToMany 关系船进行建模。用户和管理员本质上是 them 关系(至少如果你一个用户只能是一个机构的管理员,否则这需要是 ManyToMany 引用)。

有关学说协会的信息可以在这里找到:

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;

}