首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Easyadmin 3:字段不是Doctrine关联,因此不能用作关联字段

Easyadmin 3:字段不是Doctrine关联,因此不能用作关联字段
EN

Stack Overflow用户
提问于 2020-10-28 08:16:43
回答 1查看 3.1K关注 0票数 1

因此,情况是这样的:我有一个实体ProductWhisky,它是ProductAbstract的子类,其中我引用了Product实体(一对一)。产品与ProductProducer具有多对一关联。我正在使用Easyadmin3来编辑这个ProductWhisky。

这是我的ProductWhiskyCrudController的一部分:

代码语言:javascript
复制
public function configureFields(string $pageName): iterable
{
    // more fields
    yield AssociationField::new('productProducer', 'Producent');
    // even more fields
}

这是我的ProductWhiskyEntity:

代码语言:javascript
复制
class ProductWhisky extends ProductAbstract
{
    use ProductTrait;
    //props and other methods specific to ProductWhisky
}

ProductTrait

代码语言:javascript
复制
trait ProductTrait
{
    /**
     * @ORM\OneToOne(targetEntity="App\Entity\Product", cascade={"persist", "remove"})
     * @ORM\JoinColumn(nullable=false)
     */
    private $product;

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

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

        return $this;
    }

    /**
     * @return ProductProducer|null
     */
    public function getProductProducer(): ?ProductProducer
    {
        if ($this->getProduct()) {
            return $this->getProduct()->getProducer();
        }
        return null;
    }

产品实体:

代码语言:javascript
复制
class Product
{
    // more props
    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\ProductProducer", inversedBy="products", cascade={"persist"})
     * @ORM\JoinColumn(nullable=false)
     */
    private $producer;
    
    // more props and methods

    public function getProducer(): ?ProductProducer
    {
        return $this->producer;
    }

    public function setProducer(?ProductProducer $producer): self
    {
        $this->producer = $producer;

        return $this;
    }

因此,当我调用ProductWhiskyCrudController时,我总是收到消息The "productProducer" field is not a Doctrine association, so it cannot be used as an association field.

在EasyAdmin 2中,我这样做:

代码语言:javascript
复制
      form:
        fields:
          - property: 'productProducer'
            label: 'Producent'
            type: entity
            type_options: {class: 'App\Entity\ProductProducer', required: true}

你知道我怎么才能解决这个问题吗?

所有最好的时间

EN

回答 1

Stack Overflow用户

发布于 2020-10-28 16:51:32

你应该改变你的

代码语言:javascript
复制
yield AssociationField::new('productProducer', 'Producent');

使用

代码语言:javascript
复制
yield AssociationField::new('producer', 'Producent');

因为当您引用实体时,窗体必须引用字段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64564716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档