Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony2多个字段到具有多对多关系的同一属性_Symfony - Fatal编程技术网

Symfony2多个字段到具有多对多关系的同一属性

Symfony2多个字段到具有多对多关系的同一属性,symfony,Symfony,我正在从一个实体创建一个表单,我有一些属性,其中一个具有多对多关系,我需要创建多个字段来处理 产品实体 /** * @ORM\ManyToMany(targetEntity="StructureItems", inversedBy="product") * @ORM\JoinTable(name="product_structure_items", * joinColumns={@ORM\JoinColumn(name="product_id", referencedColumn

我正在从一个实体创建一个表单,我有一些属性,其中一个具有多对多关系,我需要创建多个字段来处理

产品实体

/**
 * @ORM\ManyToMany(targetEntity="StructureItems", inversedBy="product")
 * @ORM\JoinTable(name="product_structure_items",
 *      joinColumns={@ORM\JoinColumn(name="product_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="structure_item_id", referencedColumnName="id")}
 *      )
 */
protected $structureItems;
/**
 * @ORM\ManyToMany(targetEntity="Products", mappedBy="structureItems")
 */
protected $product;
结构项目实体

/**
 * @ORM\ManyToMany(targetEntity="StructureItems", inversedBy="product")
 * @ORM\JoinTable(name="product_structure_items",
 *      joinColumns={@ORM\JoinColumn(name="product_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="structure_item_id", referencedColumnName="id")}
 *      )
 */
protected $structureItems;
/**
 * @ORM\ManyToMany(targetEntity="Products", mappedBy="structureItems")
 */
protected $product;
所以在我的表单类型中,我正在做的事情如下所示

表单类型

->add('field1','entity',
            array(
                'class' => 'WidetiHarmoniaBundle:StructureItems',
                'label' => 'Tecido da Fronha',
                'empty_value' => 'Selecione o tipo de fronha',
                'query_builder' => function(EntityRepository $er) {
                        return $er->createQueryBuilder('psi')
                            ->where('psi.itemType = :itemType')
                            ->setParameter('itemType', Enumeration::FIELD_1)
                            ->orderBy('psi.itemName', 'ASC');
                    },
                'mapped' => false,
            )
        )

        ->add('field2','entity',
            array(
                'class' => 'WidetiHarmoniaBundle:StructureItems',
                'label' => 'Tecido da Fronha',
                'empty_value' => 'Selecione o tipo de fronha',
                'query_builder' => function(EntityRepository $er) {
                        return $er->createQueryBuilder('psi')
                            ->where('psi.itemType = :itemType')
                            ->setParameter('itemType', Enumeration::FIELD_2)
                            ->orderBy('psi.itemName', 'ASC');
                    },
                'mapped' => false,
            )
        )
在本例中,我将获取控制器中未映射表单字段的值,并手动将其添加到structureItems属性中。类似于

$entity->addStructureItem($form["field1"]->getData());
$entity->addStructureItem($form["field2"]->getData());
问题是,我不知道这是否是正确的方法,或者是否有更好的解决方案。如果不是最好的解决方案,花更多的时间在上面可能不是一个好办法

我希望有一种方法可以将这些字段映射到相同的属性,这可以帮助我避免大量手动编码工作


任何帮助都将不胜感激

您当然希望嵌入一个集合:

$builder->add('structureItems', 'collection', array(
    'type'         => new StructureItems(),
    'allow_add'    => true,
));
更多信息请访问