我正在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/

10-11 23:32