我有两张桌子;代理商和用户。
在大多数情况下,用户将属于代理商,否则将为空。这种关系非常简单,我在用户实体类/表中有一个可以为null的agency_id列/属性。
代理商还必须拥有管理员用户。代理商可以拥有多个管理员用户。我正在努力模仿这种关系。
如何在实体类/数据库表中表示第二个关系?我正在使用Doctrine 2(MySQL),Symfony 3和FOSUserbundle。
感谢任何帮助。
答案 0 :(得分:0)
您应该能够使用Doctrine与OneToMany关系进行建模。用户和管理员本质上都是他们的关系(至少如果一个用户只能管理一个代理,否则这需要是一个ManyToMany引用)。
有关Doctrine Associations的信息可以在这里找到:
以下是一些应该显示关联的未经测试的代码:
/**
* @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;
}