我正在Zend应用程序中从Doctrine 1.1.4升级到Doctrine 2.0.6的过程中。
目前,我正在映射实体之间的关联。在学说2的Documentation中,它说“关系可以是双向的,也可以是单向的。对于这些术语在给定上下文中的含义,我感到困惑。
如何确定关系是单向还是双向?
感谢帮助。
最佳答案
如果两个实体都包含对另一个实体的引用,则该关系是双向的。
如果省略这些引用之一,则它是单向的。
考虑典型的“帖子”和“标签”架构。通常,您将实现双向关联:
<?php
class Post {
// ...
/**
* @ManyToMany(targetEntity="Tag",inversedBy="posts")
*/
protected $tags;
// ...
}
class Tag {
// ...
/**
* @ManyToMany(targetEntity="Post",mappedBy="tags")
*/
protected $posts
// ...
}
现在,假设您认为您不需要(或很少)需要回答诸如“哪些帖子带有Tag'foo'?”之类的问题。您可以省略Tag实体中的$ posts关联,将其转换为单向关联,并减轻ORM的负担。
您仍然可以回答这种问题,但是您必须编写代码才能做到这一点。
实际上,这可能是处理“帖子/标签”方案的好方法,因为通常不会在“标签”中添加/删除帖子。通常,您只能从帖子中添加/删除标签。当您查找“带有标签'x'的所有帖子”时,您只会从“标签”转到“帖子”,这可以在某种服务类中轻松实现。
关于php - 在教义2中如何确定表关系是双向的还是单向的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6662820/