2016-03-09 149 views
0

我有兩張表;機構和用戶。兩張表,兩個關係

在大多數情況下,用戶將屬於代理商,否則將爲空。這種關係對於模型非常簡單,我在用戶實體類/表中有一個可以爲null的agency_id列/屬性。

一個機構也必須有一個管理員用戶。一個機構可以有多個管理員用戶。我正在努力塑造這種關係。

如何在實體類/數據庫表中表示第二個關係?我正在與Doctrine 2(MySQL),Symfony 3和FOSUserbundle合作。

感謝任何幫助。

+1

我認爲你正在尋找[一個一對多雙向](http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/association-mapping.html #一對多 - 雙向)關聯映射,其中'OneToMany'關聯(在您的「Agency」實體中)您將擁有'users'集合,並且在ManyToOne關聯上'agencyId' – takeit

回答

0

你應該能夠用OneToMany關係使用Doctrine來建模。用戶和管理員基本上都是他們之間的關係(至少如果你的一個用戶只能是一個代理的管理員,否則這需要是一個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; 

}