Symfony persit collection

时间:2016-05-16 13:00:34

标签: symfony symfony-2.8

我有一个实体" produit"有这种关系:

/**
 * @var \stdClass
 *
 * @ORM\ManyToMany(targetEntity="ListeBundle\Entity\GarDegatEaux", cascade={"persist"})
 * @ORM\JoinTable(name="produit_garDegatEaux",
 *      joinColumns={@ORM\JoinColumn(name="produit_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="garDegatEaux_id", referencedColumnName="id", unique=false)})
 */
private $garDegatEaux;

如下所示的表单类型:

->add('garDegatEaux', CollectionType::class, array('entry_type' => GarDegatEauxType::class,
                                                           'allow_add' => true,
                                                           'allow_delete' => true,
                                                           //'by_reference' => false,
                                                           'prototype' => true,
                                                           'label' => 'Coefficients dégât des eaux',
                                                           'entry_options' => array('label' => 'Coefficients'),
                                                           'attr' => array('class' => 'collection')
                                                        ))

当引用设置为false时,我有这个错误:

  

该物业" garDegatEaux"也没有其中一种方法" addGarDegatEau()" /" removeGarDegatEau()"," setGarDegatEaux()"," garDegatEaux()&# 34;," __ set()"或" __ call()"在课堂上存在并拥有公共访问权限#DevisBundle \ Entity \ Produit"。

当然在我的实体addGarDegatEau()" /" removeGarDegatEau()"并得到..存在并有公共访问。我还有我的构造函数:

$this->garDegatEaux = new \Doctrine\Common\Collections\ArrayCollection();

当" by_reference"设置为true,没有错误,但没有为集合提交任何内容。当我在持久化之前转储表单时,ArrayCollection中没有任何内容。

当" by_reference"注释没有错误,但ArrayCollection也没有任何内容。

我的控制器:

public function creerProduitAction(Request $request) {

    $produit = new Produit;
    $formProduit = $this->createForm(ProduitType::class, $produit);

    $formProduit->handleRequest($request);

    if ($formProduit->isValid() && $formProduit->isSubmitted()) {



        $em = $this->getDoctrine()->getManager();

        $em->persist($produit);
        $em->flush();
    }

    return $this->render('AdminBundle:Produit:creerProduit.html.twig', array(
        'formProduit' => $formProduit->createView()
    ));
}

我使用了symfony 2.7的集合,这个过程很有效。我使用symfony 2.8 atm。我不明白为什么收藏不会持续存在。

1 个答案:

答案 0 :(得分:0)

首先,正如Symfony's Docs所说:

  

类似地,如果您正在使用CollectionType字段,其中您的基础集合数据是一个对象(如与Doctrine的ArrayCollection一样),那么如果您需要加法器和移除器,则必须将by_reference设置为false(例如addAuthor()和removeAuthor( ))被称为。

这正是您的情况,因此by_reference应设置为false

至于你得到的错误,我很确定你没有必要的getter / setter,尽管你认为你有。请检查其姓名中的拼写错误等。