Symfony4 OneToMany嵌入表单集合qui subitement持续存在(??? !!!)

时间:2019-06-01 13:04:17

标签: forms collections persistence one-to-many symfony4

Bonjour

J'ai uneEntité“ Produits”àlaquelle il best lier(OneToMany)une Collection d'Entités“ Stocks”。

在“产品”中加入“股票经纪人”的惯例。

图特菲伊斯,塞斯马纳的一家“企业”产品基金会和唐纳德斯州的外交使节。

Je n'ai pas d'erreur mais简单,“股票”和“产品”以及“ d'en pasenvoyée基地”中的“必需品”。

以某种方式处理一切美好的事物,以及与之联系起来:

- crée une seconde Collection imbriquée dans le même formulaire, 
- fait plusieurs migrations en Base de données et fait le ménage, 
- ajouté des champs "created_at" et "updated_at" à toutes mes Entités.

加上一些简单的错误操作,就可以解决所有可能的问题。

J'aiessayéde reprendre la documentation sur les“ Collectionsimbriquées”,j'aiessayédifférentessolutionsproposéessurdifférentesplateformes(dont quelquesvestiges commentess resistent dans mon code)...

其他代码:

Dites-moi si vous voulez des捕获了代码供应商。

“ Prostock” $propsédans l'Entité“ Produits”

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Stocks", mappedBy="product", cascade={"persist"}, orphanRemoval=true).
     */

    private $stocks;

    /**
     * @return Collection|Stocks[]
     */

    public function getStocks(): Collection
    {
        return $this->stocks;
    }

    public function addStock(Stocks $stock): self
    {
        if (!$this->stocks->contains($stock)) {
            $this->stocks[] = $stock;
            $stock->setProducts($this);
        }

        return $this;
    }

    public function removeStock(Stocks $stock): self
    {
        if ($this->stocks->contains($stock)) {
            $this->stocks->removeElement($stock);
            // set the owning side to null (unless already changed)
            if ($stock->getProducts() === $this) {
                $stock->setProducts(null);
            }
        }

        return $this;
    }

“properété”(“产品”)dans l'Entité“ Stocks”

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Products", inversedBy="stocks", cascade={"persist"})
     * @ORM\JoinColumn(nullable=false)
     */
    private $product;

    public function getProduct(): ?Products
    {
        return $this->product;
    }

    public function setProduct(?Products $product): self
    {
        $this->product = $product;

        return $this;
    }

“产品”负责人La fonction pourcréer

    /**
     * @Route("/new", name="products_new", methods={"GET","POST"})
     */
    public function new(Request $request): Response
    {
        $product = new Products();

        // Ce test fonctionne.
        // $stock = new Stocks();
        // $stock->setStock(2);
        // $stock->setProduct($product);
        // $product->getStocks()->add($stock); 

        $form = $this->createForm(ProductsType::class, $product);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $entityManager = $this->getDoctrine()->getManager();

        // trouvé sur Stackoverflow : ne résoud pas le problème.
        // $stock = $product->getStocks();
        // $product->setStocks(array());
        // $entityManager->persist($product);
        // $entityManager->flush();
        // $product->setStocks($stock);

            $entityManager->persist($product);
            $entityManager->flush();

            return $this->redirectToRoute('products_index');
        }

        return $this->render('products/new.html.twig', [
            'product' => $product,
            'form' => $form->createView(),
        ]);
    }

“股票交易所”财务总监的新功能

    /**
     * @Route("/new", name="stocks_new", methods={"GET","POST"})
     */
    public function new(Request $request): Response
    {
        $stock = new Stocks();
        $form = $this->createForm(StocksType::class, $stock);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($stock); 
            $entityManager->flush();

            return $this->redirectToRoute('stocks_index');
        }

        return $this->render('stocks/new.html.twig', [
            'stock' => $stock,
            'form' => $form->createView(),
        ]);
    }

“产品”配方中的L'entrée“股票”

            ->add('stocks', CollectionType::class, [
                'entry_type' => StocksType::class,
                'entry_options' => ['label' => false],
                'allow_add' => true,
                'by_reference' =>false,
                'allow_delete' => true,
            ]);

0 个答案:

没有答案