Symfony 5 easyadmin 3 与 ManyToOne 关系的实体 - 不保存在“多”端

Posted

技术标签:

【中文标题】Symfony 5 easyadmin 3 与 ManyToOne 关系的实体 - 不保存在“多”端【英文标题】:Symfony 5 easyadmin 3 Entity with relation ManyToOne - NOT saving on the "many" side 【发布时间】:2021-06-18 00:02:46 【问题描述】:

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

当我尝试编辑类别以分配帖子时,帖子未保存在数据库中。 但是如果我在帖子编辑中添加类别,则会保存在数据库中。

知道我在这里缺少什么吗?

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();

实体类别.php

/**
 * @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;

【问题讨论】:

你说得对,这只是一个复制/粘贴错误,因为我编辑了代码中的名称以使其更易于理解。无论如何,我真的很感谢你花时间回答。我编辑了我的问题。 我认为这个关于另一个问题的答案是相关的。 ***.com/a/35765987/7891743 我使用 make:entity 创建了一个复数关系字段,我认为这是这里的问题。使用“帖子”多对一类别 【参考方案1】:

由于以下原因找到了解决方案: https://github.com/EasyCorp/EasyAdminBundle/issues/860#issuecomment-192605475

对于 Easy Admin 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')
                ->setFormTypeOptions([
                    'by_reference' => false,
                ])
                ->autocomplete();

【讨论】:

以上是关于Symfony 5 easyadmin 3 与 ManyToOne 关系的实体 - 不保存在“多”端的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 5. EasyAdmin 3. VichUploader。同时上传多个文件

在 Symfony 5 中使用 composer 安装 EasyAdmin 的问题

EasyAdmin 3.1 CrudControllers Symfony

如何在 Symfony EasyAdmin 3 中创建密码输入类型

EasyAdmin 3 日期时间选择器时间格式

Symfony 5 - Easy Admin 3:关联实体有这么多数据时,AssociationField 的负载很重