2016-06-14 161 views
1

我想創建一個表單,我可以下訂單。我的數據庫架構是這樣的:Symfony 3形式多對多

enter image description here

我想有這樣的形式:

enter image description here

這是我到目前爲止有:

$order = new Order(); 

$form = $this->createFormBuilder($order) 
    ->add('naam', TextType::class) 
    ->add('email', EmailType::class) 
    ->add('phoneNumber', TextType::class) 
    ->add('dateTakeout', DateType::class) 
    ->add('hourTakeout', DateType::class) 
    ->add('save', SubmitType::class, array('label' => 'Verzenden')) 
    ->getForm(); 

但我堅持將產品添加到我的表單中。我怎樣才能做到這一點?

UPDATE:

我的產品和類別的連接是這樣的:

enter image description here

我有一個ID,名稱,啓用和parentCategoryId類別的實體。

在我的產品實體中,我有一個category屬性。

我想顯示的類別和同類產品:

enter image description here

+0

您希望產品如何顯示 表格?一個下拉列表可能?就像能夠選擇產品一樣?或者那些可以輸入產品「數量」的數字字段? –

+0

@AlvinBunk:我想顯示所有的產品,你可以給一定的數量(這是多少到很多的數字字段) – nielsv

回答

1

添加到您的形式:

use Symfony\Component\Form\Extension\Core\Type\IntegerType; 
... 
->add('product_A', IntegerType::class) 
->add('product_B', IntegerType::class) 
->add('product_C', IntegerType::class) 
->add('product_D', IntegerType::class) 

這是一個整數,這樣你就可以直接電話諮詢:

$prodA_amount = $form->get('product_A')->getData(); 

得到的值...

+0

如何將它們分類? – nielsv

+0

如果只是視覺效果,請使用'

'標籤和''標籤,然後對它們進行邏輯分組。也許我不明白你想達到什麼目的? –

+0

我想將產品分組(如圖所示)。但是我怎麼能在我的控制器中做到這一點,並在我的觀點中顯示每個類別下的產品? – nielsv

0

我認爲這是嵌入多種形式的實體OrderHasProducts

當初始化表單對象,則需要遍歷所有的產品(或者他們中的一些根據您的要求),並把它們添加到Order新實例,然後讓symfony在創建表單時發揮它的魔力。

要創建嵌入形式:

$builder->add('order_has_products', CollectionType::class, array(
     'entry_type' => OrderHasProduct::class 
)); 

並創建形式爲OrderHasProduct實體

(檢查文檔How to Embed a Collection of Forms

,並在控制器中,類似如下:

$order = new Order(); 
foreach($products as $product) : 
// you may wanna create your custom method here 
    $order->addOrderProduct((new OrderHasProduct()) 
         ->setOrder($order) 
         ->setProduct($product)); 
endforeach;