2017-07-16 91 views
0

我有一個Session實體,它具有整數$num屬性。兩個或更多個會話可以具有相同的$num值。 A Session可能屬於若干Group實體。如何防止arraycollection中的重複值?

A Group也可以附加幾個會話。創建Group時,用戶可以將其包含的會話分配到ArrayCollection,但一個組不能有兩個具有相同$num值的會話。

如何使用Symfony表單組件強制執行此限制,特別是使用CollectionType字段類型?

編輯:

這裏的(單向)許多一對多的映射,從集團會議:

# Group.orm.yml 
manyToMany: 
    sessions: 
     targetEntity: Session 
     joinTable: 
      name: sessiongroups_sessions 
      joinColumns: 
       group_id: 
        referencedColumnName: id 
      inverseJoinColumns:   
       session_num: 
        referencedColumnName: num 

我在inverseJoinColumn(而不是id)設置$num作爲參考列,所以sessiongroups_sessions表永遠不會有兩行或多行具有相同$num值的相同組ID引用會話。

這是從數據庫的角度來看 罰款(編輯:顯然不是,我認爲這將沒有想出來工作),我需要知道我可以在形式執行此,用戶指定的會議組。

我知道存在一個約束,稱爲Collection,但它需要爲集合的每個鍵指定驗證程序。我知道我可以建立形式的會議添加到這樣的集合:

$group = new Group(); 
$form = $this->createFormBuilder($group)->add('sessions', CollectionType::class, 
array('entry_type' => EntityType::class, 'entry_options' => array('class' => AppBundle:Group)); 

如何指定這裏約束確保集合從不保存具有相同$num值兩會?

+0

請首先顯示一些代碼。這是你在這方面的第二個問題。 – colburton

+0

我甚至不知道從哪裏開始。我可以發佈會話和組之間多對多關聯的映射信息(如果有幫助的話)@colburton – MrWarlock616

+0

symfony中的表單組件太多了,以至於讓我感到困惑 – MrWarlock616

回答

0

你需要和

假設你正在使用YAML映射,您在Group實體關聯看起來是這樣的:

manyToMany: 
    sessions: 
     targetEntity: Session 
     mappedBy: groups 
     indexBy: num 

然後,你需要修改制定者使用$num作爲鍵太。更多信息在上述鏈接下的Doctrine文檔。

很顯然,如果有人試圖根據您的需要添加Session以及現有的$num值,您還需要處理一個案例。

@edit:

我設置$ NUM作爲inverseJoinColumn引用的列,(...),這是從數據庫的角度來看

不,這不是很好。$numSession實體中並非唯一,因此在Group實體中具有$num值,因此無法識別任何特定的Session實例。它需要是一個獨特的關鍵。

+0

謝謝!我會看看。同時,你能看到我的編輯,並幫助我使用表單組件來實現這一點嗎? – MrWarlock616

+0

@ MrWarlock616看我的編輯。 –

+0

哦,我不知道inverseJoinColumn期望列在相關實體中是唯一的。謝謝! @Jakub Matczak – MrWarlock616