如何在 Symfony 中保存 OneToMany 关系数据?

How to persist OneToMany Relationship data in Symfony?

我在将 OneToMany 关系数据保存到数据库时遇到了问题。 以下是代码:

项目类型

->add('title')
->add('image',FileType::class)
->add('size', CollectionType::class,[
    'entry_type'=> SizeType::class,
    'entry_options' => ['label' => false],
    'by_reference' => false,
    'allow_add' =>true,
    'allow_delete' => true
])
->add('content',CKEditorType::class)
->add('save', SubmitType::class);

项目实体

class Item
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $title;

    /**
     * @ORM\OneToMany(targetEntity=Size::class, mappedBy="size",cascade={"persist"})
     */
    private $size;

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

    public function getId(): ?int
    {
        return $this->id;
    }

    /**
     * @return Collection|Size[]
     */
    public function getSize(): Collection
    {
        return $this->size;
    }

    public function addSize(Size $size): self
    {
        if (!$this->size->contains($size)) {
            $this->size[] = $size;
            $size->setSize($this);
        }

        return $this;
    }

    public function removeSize(Size $size): self
    {
        if ($this->size->removeElement($size)) {
            // set the owning side to null (unless already changed)
            if ($size->getSize() === $this) {
                $size->setSize(null);
            }
        }

        return $this;
    }
}

大小实体

class Size
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity=Item::class, inversedBy="size", fetch="EAGER")
     */
    private $size;

    public function getSize(): ?Item
    {
        return $this->size;
    }

    public function setSize(?Item $size): self
    {
        $this->size = $size;

        return $this;
    }
}

控制器

/**
 * @Route("/admin/post-product", name="post_product")
 */
public function postProduct(Request $request, SluggerInterface $slugger): Response
{
    $item = new Item();   
    $size = new Size();
    $form = $this->createForm(ItemType::class, $item);
    $form->handleRequest($request);
    if($form->isSubmitted()){
        $file_image = $form->get('image')->getData();

        dump($item->getSize());
        //die;
        if($file_image){
           //image
        }

        $sizes = $item->getSize();
        $item->addSize($sizes);

        $em = $this->getDoctrine()->getManager();
        $em->persist($item);
        $em->flush();

        return $this->redirectToRoute('post_product');
    }
    return $this->render('admin/post-product.html.twig',[

        'form' => $form->createView(),
    ]);
} 

我的问题是我无法将数据保存到数据库中 我试过使用循环,但我做不到。 class Item 是 onetomany with Size。 哪个项目具有相关尺寸(s、m、l、xl、xxl)。 我想在这里实现的是,当我单击保存按钮时,必须填充项目和大小 table。 请帮帮我..

您正在尝试从相反的一侧(具有 mappedBy 的一侧)保持关系。坚持相反的一面时,学说不会检查关系。在这种特殊情况下,我认为您混淆了 owning/inverse 方面。我会尝试将 inversedBy 放入您的 Item class 并将 mappedBy 放入 Size class.

你是否想保持这种关系。在反面设置 属性 时,您必须在拥有方设置 属性。