Symfony 3 形式多对多

Symfony 3 form many-to-many

我正在尝试创建一个可以下订单的表格。我的数据库架构如下所示:

我想要这样的表格:

这是我目前拥有的:

$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();

但我无法将产品添加到我的表单中。我该怎么做?

更新:

我的产品和分类的关系是这样的:

我有一个带有 ID、名称、已启用和 parentCategoryId 的类别实体。

在我的产品实体中,我有一个类别 属性。

我想展示这样的类别和产品:

将此添加到您的表单中:

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();

获取值...

我认为这是为实体 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;