实体-类映射无效:彼此不一致



我有一个表"cms_objects"//object .php -存储所有对象信息我有另一个表"cms_media"//media .php -存储所有的媒体信息

一个对象可以有多个媒体项(post with许多不同的图片)

在Object.php

/**
 * @ORMOneToMany(targetEntity="Media", mappedBy="Object")
 */
private $cms_media;
在Media.php

/**
 * @ORMManyToOne(targetEntity="Object", inversedBy="cms_media")
 * @ORMJoinColumn(name="object_id", referencedColumnName="id")
 *
 * @AnnotationExclude()
 */
private $object;

当我运行:php public/index.php orm:validate-schema -我得到:

[Mapping]  FAIL - The entity-class 'ApplicationEntityCmsMedia' mapping is invalid:
* The mappings ApplicationEntityCmsMedia#object and ApplicationEntityCmsObject#cms_media are inconsistent with each other.

[Mapping]  FAIL - The entity-class 'ApplicationEntityCmsObject' mapping is invalid:
* The association ApplicationEntityCmsObject#cms_media refers to the owning side field ApplicationEntityCmsMedia#Object which does not exist.

理想情况下,我需要能够创建一个ZF2表单与元素:'media'或'cms_media',但我还没有能够验证它…

您可以尝试在注释中使用FQCN。而不是

/**
 * @ORMOneToMany(targetEntity="Media", mappedBy="Object")
 */

/**
 * @ORMOneToMany(targetEntity="ApplicationEntityCmsMedia", mappedBy="Object")
 */

我还想建议使用 camelcase 实体属性而不是underscored_ones。使用DoctrineObject水化器对具有下划线属性的实体的水化过程存在问题。你可以在这里找到更多细节。

当心 -使用不必要的双向关联会增加对象图和领域模型的复杂性。最佳实践是尽可能避免双向关联。

对于这种情况,如果不需要像 那样从Media反向访问Post,则可以使用Post (Object)和Media实体之间的单向关系重写相同的映射。

$media->getPost()

例如Application/Entity/Cms/Post.php:

/** @ORMEntity **/
class Post
{  
    /**
     * One to many, unidirectional
     * @ORMManyToMany(targetEntity="ApplicationEntityCmsMedia")
     * @ORMJoinTable(name="post_to_media",
     *      joinColumns={@ORMJoinColumn(name="post_id", referencedColumnName="id")},
     *      inverseJoinColumns={
     *      @ORMJoinColumn(name="media_id", referencedColumnName="id",unique=true)
     *      })
     **/
    private $media;
    public function __construct()
    {
        $this->media = new DoctrineCommonCollectionsArrayCollection();
    }
    // ...
}

and Application/Entity/Cms/Media.php:

/** @ORMEntity **/
class Media
{
    // No need to know about post
}

相关内容

最新更新