Symfony 5 easyadmin 3实体与多通有关联-不保存在;“许多”;一边

Symfony 5 easyadmin 3实体与多通有关联-不保存在;“许多”;一边,symfony,orm,symfony5,easyadmin,easyadmin3,Symfony,Orm,Symfony5,Easyadmin,Easyadmin3,我有一个非常基本的symfony 5+easyadmin 3应用程序。 我使用make:entity创建了两个实体:post和Categories 当我试图编辑类别以分配帖子时,帖子不会保存在DB中。 但如果我在后期编辑中添加类别,则会将其保存在db中 你知道我错过了什么吗 CategoryCrudController.php public function configureFields(string $pageName): iterable { if (Crud::PAGE_EDIT

我有一个非常基本的symfony 5+easyadmin 3应用程序。 我使用make:entity创建了两个实体:post和Categories

当我试图编辑类别以分配帖子时,帖子不会保存在DB中。 但如果我在后期编辑中添加类别,则会将其保存在db中

你知道我错过了什么吗

CategoryCrudController.php

public function configureFields(string $pageName): iterable
{
    if (Crud::PAGE_EDIT === $pageName)
    {
        yield TextField::new('title');
        
        yield DateTimeField::new('created_at')
            ->setFormTypeOption('disabled','disabled');
       
        yield AssociationField::new('posts')
            ->autocomplete();
/**
 * @ORM\OneToMany(targetEntity=Post::class, mappedBy="category")
 */
private $posts;

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


/**
 * @return Collection|Post[]
 */
public function getPosts(): Collection
{
    return $this->posts;
}

public function addPost(Post $post): self
{
    if (!$this->posts->contains($post)) {
        $this->posts[] = $post;
        $post->setCategory($this);
    }

    return $this;
}

public function removePost(Post $post): self
{
    if ($this->posts->removeElement($post)) {
        // set the owning side to null (unless already changed)
        if ($post->getCategory() === $this) {
            $post->setCategory(null);
        }
    }

    return $this;
}
public function configureFields(string $pageName): iterable
    {
        if (Crud::PAGE_EDIT === $pageName)
        {
            yield TextField::new('title');

            yield DateTimeField::new('created_at')
                ->setFormTypeOption('disabled','disabled');

            yield AssociationField::new('posts')
                ->setFormTypeOptions([
                    'by_reference' => false,
                ])
                ->autocomplete();
实体类别.php

public function configureFields(string $pageName): iterable
{
    if (Crud::PAGE_EDIT === $pageName)
    {
        yield TextField::new('title');
        
        yield DateTimeField::new('created_at')
            ->setFormTypeOption('disabled','disabled');
       
        yield AssociationField::new('posts')
            ->autocomplete();
/**
 * @ORM\OneToMany(targetEntity=Post::class, mappedBy="category")
 */
private $posts;

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


/**
 * @return Collection|Post[]
 */
public function getPosts(): Collection
{
    return $this->posts;
}

public function addPost(Post $post): self
{
    if (!$this->posts->contains($post)) {
        $this->posts[] = $post;
        $post->setCategory($this);
    }

    return $this;
}

public function removePost(Post $post): self
{
    if ($this->posts->removeElement($post)) {
        // set the owning side to null (unless already changed)
        if ($post->getCategory() === $this) {
            $post->setCategory(null);
        }
    }

    return $this;
}
public function configureFields(string $pageName): iterable
    {
        if (Crud::PAGE_EDIT === $pageName)
        {
            yield TextField::new('title');

            yield DateTimeField::new('created_at')
                ->setFormTypeOption('disabled','disabled');

            yield AssociationField::new('posts')
                ->setFormTypeOptions([
                    'by_reference' => false,
                ])
                ->autocomplete();

由于以下原因找到了解决方案:

为了便于管理3,您只需添加

->setFormTypeOptions([
    'by_reference' => false,
])
CategoryCrudController.php

public function configureFields(string $pageName): iterable
{
    if (Crud::PAGE_EDIT === $pageName)
    {
        yield TextField::new('title');
        
        yield DateTimeField::new('created_at')
            ->setFormTypeOption('disabled','disabled');
       
        yield AssociationField::new('posts')
            ->autocomplete();
/**
 * @ORM\OneToMany(targetEntity=Post::class, mappedBy="category")
 */
private $posts;

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


/**
 * @return Collection|Post[]
 */
public function getPosts(): Collection
{
    return $this->posts;
}

public function addPost(Post $post): self
{
    if (!$this->posts->contains($post)) {
        $this->posts[] = $post;
        $post->setCategory($this);
    }

    return $this;
}

public function removePost(Post $post): self
{
    if ($this->posts->removeElement($post)) {
        // set the owning side to null (unless already changed)
        if ($post->getCategory() === $this) {
            $post->setCategory(null);
        }
    }

    return $this;
}
public function configureFields(string $pageName): iterable
    {
        if (Crud::PAGE_EDIT === $pageName)
        {
            yield TextField::new('title');

            yield DateTimeField::new('created_at')
                ->setFormTypeOption('disabled','disabled');

            yield AssociationField::new('posts')
                ->setFormTypeOptions([
                    'by_reference' => false,
                ])
                ->autocomplete();

由于以下原因找到了解决方案:

为了便于管理3,您只需添加

->setFormTypeOptions([
    'by_reference' => false,
])
CategoryCrudController.php

public function configureFields(string $pageName): iterable
{
    if (Crud::PAGE_EDIT === $pageName)
    {
        yield TextField::new('title');
        
        yield DateTimeField::new('created_at')
            ->setFormTypeOption('disabled','disabled');
       
        yield AssociationField::new('posts')
            ->autocomplete();
/**
 * @ORM\OneToMany(targetEntity=Post::class, mappedBy="category")
 */
private $posts;

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


/**
 * @return Collection|Post[]
 */
public function getPosts(): Collection
{
    return $this->posts;
}

public function addPost(Post $post): self
{
    if (!$this->posts->contains($post)) {
        $this->posts[] = $post;
        $post->setCategory($this);
    }

    return $this;
}

public function removePost(Post $post): self
{
    if ($this->posts->removeElement($post)) {
        // set the owning side to null (unless already changed)
        if ($post->getCategory() === $this) {
            $post->setCategory(null);
        }
    }

    return $this;
}
public function configureFields(string $pageName): iterable
    {
        if (Crud::PAGE_EDIT === $pageName)
        {
            yield TextField::new('title');

            yield DateTimeField::new('created_at')
                ->setFormTypeOption('disabled','disabled');

            yield AssociationField::new('posts')
                ->setFormTypeOptions([
                    'by_reference' => false,
                ])
                ->autocomplete();

你说得对,这只是一个复制/粘贴错误,因为我编辑了代码中的名称以使其更易于理解。我真的很感谢你抽出时间来回答。我编辑了我的问题。我认为这个关于另一个问题的答案是相关的。我用make:entity创建了一个复数形式的关系字段,我想这就是问题所在。使用了“posts”多个分类你是对的,这只是一个复制/粘贴错误,因为我编辑了代码中的名称以使其更易于理解。我真的很感谢你抽出时间来回答。我编辑了我的问题。我认为这个关于另一个问题的答案是相关的。我用make:entity创建了一个复数形式的关系字段,我想这就是问题所在。使用了“posts”多个类别