Symfony2保留带有关系实体的表单集合

ob

尚未通过研究找到解决此问题的方法,但是我试图将两种形式(嵌入/集合)保存到数据库中。我有彼此相关的实体,并且我希望表单提交两个实体并将其持久化到数据库中。

主要实体:

/**
 * @var integer
 * @ORM\OneToMany(targetEntity="Sub", mappedBy="mainId", cascade={"persist"})
 */
protected $sub;

public function __construct() {
    $this->sub = new ArrayCollection();
}

子实体:

 /**
 * @var integer
 *
 * @ORM\Column(name="main_id", type="integer")
*/
protected $mainId;

.......

  /**
 * @ORM\ManyToOne(targetEntity="Main", inversedBy="sub")
 * @ORM\JoinColumn(name="main_id", referencedColumnName="id")
 */
protected $main;

这是我的MainType表单:

class MainType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('dano', 'text', array(
                'label' => 'DA: ',
                'disabled' => true
            ))
        ->add('partno','text', array(
                'label' => 'Part: ',
                'disabled' => true
            ))
        ->add('batchno', 'text', array(
                'label' => 'Batch: ',
                'disabled' => true
            ))
        ->add('sub', 'collection', array('type' => new SubType()))
        ->add('submit', 'submit');
}......

和我的SubType形式:

class SubType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('main_id','hidden')
        ->add('rackno','text', array(
                'label' => 'Rack No(s) '
            ))
        ->add('diecode','text', array(
                'label' => 'Die Code '
            ))
        ->add('heatcode','text', array(
                'label' => 'Heat Code '
            ))
        ->add('inqty','integer', array(
                'label' => 'Qty In '
            ))
        ->add('onhold','choice', array(
                'label' => 'Hold',
                'choices' => array(
                    '1' => 'On Hold',
                    '0' => 'Released'
                ),
                'multiple' => false,
                'expanded' => true
            ));

而我的控制器:

/**
 * @param Request $request
 * @Route("/{dano}", name="subpart_part")
 */
public function submitPartByDAAction(Request $request, $dano) {
    $em = $this->getDoctrine()->getManager();

    $entity = $em->getRepository('Bundle:Main')
        ->findOneByDano($dano);

    $partno = $entity->getPartno();
    $batchno = $entity->getBatchno();
    $mainid = $entity->getId();


    $main1 = new Main();
    $main1->setDano($dano);
    $main1->setPartno($partno);
    $main1->setBatchno($batchno);

    $sub1 = new Sub();
    $sub1->setMainId($mainid);
    $main1->getSub()->add($sub1);

    $form = $this->createForm(new MainType(), $main1, array(
            'method' => 'POST'
        ));

    $form->handleRequest($request);
    if($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
            $em->persist($main1);
            $em->flush();

        return $this->redirect($this->generateUrl('subpart_home'));

    }

    return $this->render('Bundle:Parts:addparts.html.twig', array(
            'form' => $form->createView()
        ));
}

让我解释一下我在这里所做的事情,起初我没有Sub的“ main_id”字段(与Main的id有关),但是当我尝试保留数据时,它给了我错误:

An exception occurred while executing 'INSERT INTO sub 
(main_id, rackno, heatcode, diecode, inqty, onhold) VALUES 
(?, ?, ?, ?, ?, ?)' with params [null, "46", "eterte", "seteter", 3, 0]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 
'main_id' cannot be null

因此,我创建了一个隐藏的字段“ main_id”,并通过getId()从Main获取了ID。并将其传递到Sub表单的setMainId();中。持久,它仍然给我同样的错误,即“ main_id”不能为null。

我想念什么?谢谢!

布龙查

您定义的实体错误。首先了解ORM和关系的概念。您的Sub实体不需要具有integer main_id只需将其映射到Main实体。您的Main实体看起来应该像

/**
 * @var Sub 
 * this value is just integer in database, but doc should point it to Sub
 * @ORM\OneToMany(targetEntity="Sub", mappedBy="mainId", cascade={"persist"})
 */
protected $sub;

public function __construct() {
    $this->sub = new ArrayCollection();
}

而你的Sub实体

/**
 * @ORM\ManyToOne(targetEntity="Main", inversedBy="sub")
 * @ORM\JoinColumn(name="main_id", referencedColumnName="id")
 */
protected $main;

您不需要main_id。ORM将为您处理。MainType形式是好的。只是摆脱SubType形式的main_id

您应该按对象而不是其ID引用实体。在您的控制器中也要使用

$sub1->setMainId($mainid);

您应该设置对象。

$sub1->setMain($main1);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有多个实体的 Symfony2 表单提交缓慢

来自分类Dev

处理具有多个实体关系的复杂Symfony2表单

来自分类Dev

具有关系属性的Symfony2 findBy方法

来自分类Dev

Symfony2表单集合-

来自分类Dev

如何验证Symfony2中具有集合的表单?

来自分类Dev

Symfony2:从集合中间删除实体

来自分类Dev

Symfony2实体与列的关系

来自分类Dev

Symfony2关系实体+形式

来自分类Dev

Symfony2 Doctrine2多对多将所有实体及其关系实体

来自分类Dev

Symfony2 Doctrine2多对多将所有实体及其关系实体

来自分类Dev

symfony2表单创建集合和实体相结合的新类型

来自分类Dev

Symfony2使用Doctrine UNIQUE INDEX和ORDER BY保留表单集合吗?

来自分类Dev

动态表单(开关实体)symfony2

来自分类Dev

Symfony2表单收集自动保留

来自分类Dev

Symfony2实现OneToOne关系的表单

来自分类Dev

Symfony2实现OneToOne关系的表单

来自分类Dev

Symfony2形式的实体字段,具有多个,选择集设置后不保留数据

来自分类Dev

Symfony2形成具有多对多关系的实体字段

来自分类Dev

Symfony2从具有ManyToMany关系的反向实体获取对象

来自分类Dev

Symfony2从具有ManyToMany关系的反向实体获取对象

来自分类Dev

Symfony2 ManyToMany 关系也保存了现有的相关实体

来自分类Dev

doctrine2 symfony2关系实体

来自分类Dev

具有CRUD的Symfony2实体

来自分类Dev

symfony2表单,对象集合,发布更新现有对象属性的信息

来自分类Dev

如何在Symfony2中创建具有一个实体的多行的表单

来自分类Dev

Symfony2:具有空值的实体表单字段

来自分类Dev

Symfony2:在单独的文件中没有实体的情况下创建表单

来自分类Dev

无法将现有实体映射到symfony2中的嵌入式表单

来自分类Dev

Symfony2 Forms:设置没有实体的表单名称

Related 相关文章

  1. 1

    带有多个实体的 Symfony2 表单提交缓慢

  2. 2

    处理具有多个实体关系的复杂Symfony2表单

  3. 3

    具有关系属性的Symfony2 findBy方法

  4. 4

    Symfony2表单集合-

  5. 5

    如何验证Symfony2中具有集合的表单?

  6. 6

    Symfony2:从集合中间删除实体

  7. 7

    Symfony2实体与列的关系

  8. 8

    Symfony2关系实体+形式

  9. 9

    Symfony2 Doctrine2多对多将所有实体及其关系实体

  10. 10

    Symfony2 Doctrine2多对多将所有实体及其关系实体

  11. 11

    symfony2表单创建集合和实体相结合的新类型

  12. 12

    Symfony2使用Doctrine UNIQUE INDEX和ORDER BY保留表单集合吗?

  13. 13

    动态表单(开关实体)symfony2

  14. 14

    Symfony2表单收集自动保留

  15. 15

    Symfony2实现OneToOne关系的表单

  16. 16

    Symfony2实现OneToOne关系的表单

  17. 17

    Symfony2形式的实体字段,具有多个,选择集设置后不保留数据

  18. 18

    Symfony2形成具有多对多关系的实体字段

  19. 19

    Symfony2从具有ManyToMany关系的反向实体获取对象

  20. 20

    Symfony2从具有ManyToMany关系的反向实体获取对象

  21. 21

    Symfony2 ManyToMany 关系也保存了现有的相关实体

  22. 22

    doctrine2 symfony2关系实体

  23. 23

    具有CRUD的Symfony2实体

  24. 24

    symfony2表单,对象集合,发布更新现有对象属性的信息

  25. 25

    如何在Symfony2中创建具有一个实体的多行的表单

  26. 26

    Symfony2:具有空值的实体表单字段

  27. 27

    Symfony2:在单独的文件中没有实体的情况下创建表单

  28. 28

    无法将现有实体映射到symfony2中的嵌入式表单

  29. 29

    Symfony2 Forms:设置没有实体的表单名称

热门标签

归档