教义实体映射不正确

Posted

技术标签:

【中文标题】教义实体映射不正确【英文标题】:Doctrine entity mapping incorrect 【发布时间】:2016-02-28 16:43:20 【问题描述】:

我刚刚创建了一个名为 ProductReviews 的新实体,其中包含以下两个连接。

/**
 * @var \Application\Entity\Products
 *
 * @ORM\ManyToOne(targetEntity="Application\Entity\Products", inversedBy="reviews")
 * @ORM\JoinColumns(
 *   @ORM\JoinColumn(name="product_id", referencedColumnName="product_id")
 * )
 */
private $product;

/**
 * @var \Application\Entity\Users
 *
 * @ORM\ManyToOne(targetEntity="Application\Entity\Users", inversedBy="reviews")
 * @ORM\JoinColumns(
 *   @ORM\JoinColumn(name="user_id", referencedColumnName="user_id")
 * )
 */
private $user;

在我的 Products 实体中

/**
 * @var \Doctrine\ORM\PersistentCollection
 *
 * @ORM\OneToMany(targetEntity="Application\Entity\ProductReviews", cascade="persist", mappedBy="product")
 */
private $reviews;

最后在我的用户实体中

/**
 * @var \Doctrine\ORM\PersistentCollection
 *
 * @ORM\OneToMany(targetEntity="Application\Entity\ProductReviews", mappedBy="user")
 * )
 */
private $reviews;

当我去验证我的实体时,我收到以下错误

[映射] FAIL - 实体类“Application\Entity\ProductReviews”映射无效:

关联 Application\Entity\ProductReviews#product 指的是不存在的反边字段 Application\Entity\Products#reviews。

关联Application\Entity\ProductReviews#user指的是不存在的反边字段Application\Entity\Users#reviews。

但是,两个反向字段都存在,据我所知,映射正确。

谁能发现我做错了什么?

非常感谢。

【问题讨论】:

【参考方案1】:

我已经想通了。问题是由 Doctrine 缓存引起的,通过清除它,实体现在可以正确映射。

我使用以下命令行命令清除缓存。

php ./vendor/doctrine/doctrine-module/bin/doctrine-module orm:clear-cache:query
php ./vendor/doctrine/doctrine-module/bin/doctrine-module orm:clear-cache:metadata
php ./vendor/doctrine/doctrine-module/bin/doctrine-module orm:clear-cache:result

以及以下检查实体映射。

php ./vendor/doctrine/doctrine-module/bin/doctrine-module orm:validate-schema

我希望这对某人有所帮助。

【讨论】:

以上是关于教义实体映射不正确的主要内容,如果未能解决你的问题,请参考以下文章

教义存储库与私人成员

教义2多个mappedBy?

具有连接的实体和存储库中的教义可重用标准

教义事件,更新持久化实体

教义自引用关联映射(Symfony)

Doctrine2 Merge() 因复合索引而失败教义2错误?