我有一个表"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
}