[英]Symfony2/Doctrine - form using two entities and a jointable/joinentity with metadata
所以我有三個實體...
合同 (編號,名稱,服務)
服務 (編號,名稱,推薦價格)
ContractService (client_id,service_id,adjustedPrice)
我想要一個用於創建/編輯“ 合同 ”的表格,該表格顯示每個可能的“ 服務 ”的復選框,以及一個文本框,用於說明該服務的調整后價格 。
我花了幾天的時間試圖找出構造所有這些內容的最佳方法,但現在真的很難。 我認為它在設計上類似於您用來為用戶啟用/禁用權限的表單,但是我找不到任何好的示例。
現在,我有了我的“ 合同 ”實體,該實體與其“合同服務”具有一個“一對多”關聯,因為一個合同可以包含許多“合同服務”。 'ContractServices'實體具有與'Services'的manyToOne關聯,在這里manyToOne正確嗎?
當我嘗試使用ContractServiceType表單收集服務時,除非在呈現表單之前已將一個或多個虛擬“ ContractService”實體分配給“ Contract”實體,否則我在表單上沒有任何數據(類似於嵌入的任務/標簽) Symfony網站上的表單教程)。
同樣,一旦數據被持久保存,“ ContractServiceType”表單就會開始復制,一次是針對虛擬對象,另一次是針對已針對“ Contract”持久化到數據庫的任何對象。 這是我到目前為止最接近的,所以我決定可以在控制器中編寫邏輯,以決定以后要創建哪些虛擬實體,基於哪些實體已經與“合同”相關聯,盡管似乎應該更好的解決方案。
因此,我現在的解決方案是使用“服務”實體存儲庫,查詢所有唯一的“服務” ,然后使用這些服務生成一些虛擬“ ContractService”實體,以便在構建表單時使用。 它產生了我要查找的內容,因為我為每個可能的“服務”都有一個復選框(“啟用”)和AdjustedPrice字段。
這是處理此問題的最佳方法嗎?
如果是這樣,是否有一種方法可以在ContractService表單構建器中引用關聯的“服務”名稱(應該通過聯接表使用?)?
你不能做很多很多嗎?
這就是ZfcRbac在ZF2 / Doctrine2中的操作方式
RbacRole實體
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="Admin\Entity\RbacPermission", inversedBy="role")
* @ORM\JoinTable(name="rbac_role_permission",
* joinColumns={
* @ORM\JoinColumn(name="role_id", referencedColumnName="role_id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="perm_id", referencedColumnName="perm_id")
* }
* )
*/
protected $perm;
/**
* Constructor
*/
public function __construct()
{
$this->perm = new \Doctrine\Common\Collections\ArrayCollection();
}
RbacPermission實體
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="Admin\Entity\RbacRole", mappedBy="perm")
*/
protected $role;
/**
* Constructor
*/
public function __construct()
{
$this->role = new \Doctrine\Common\Collections\ArrayCollection();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.