学说2:加载实体和子项计数

时间:2012-07-10 02:31:19

标签: php count doctrine-orm

我有这两个实体:

消息实体

class Message
{
    /**
    * @ManyToOne(targetEntity="User")
    * @JoinColumn(name="author", referencedColumnName="id_user")
    */
    protected $author;

用户实体

class User
{
    /**
     * @Id
     * @Column(type="integer", nullable=false, name="id_user")
     * @GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @Column(type="string", nullable=false)
     */
    protected $name;

我需要获取用户及其数据的总消息,以便回显这样的内容:

echo $user->getName() . " have {$user->totalOfMessage()}";

我现在可以在User实体中建立关系以获取消息集合。但我不知道是否只需要增加尺寸。

2 个答案:

答案 0 :(得分:2)

好吧,我找到了答案。至少有一个不错的选择。

从Doctrine 2.1开始,你可以将关联标记为额外的懒惰。这意味着调用$ user-> getMessages() - > count()不会加载消息,它只会向数据库发出COUNT查询。

您可以在此处阅读有关额外延迟收藏的内容:http://www.doctrine-project.org/docs/orm/2.1/en/tutorials/extra-lazy-associations.html

答案 1 :(得分:0)

我最近一直试图让EXTRA_LAZY加载工作,并发现我认为文档中的一个重大错误,如页面所示: -

http://www.doctrine-project.org/docs/orm/2.1/en/tutorials/extra-lazy-associations.html

我希望大多数Doctrine用户可能会意识到fetch =" EXTRA_LAZY"需要被置于拥有者身上。 ManyToMany关系的一侧,但示例显示注释被添加到包含' mappedBy'哪个不是拥有者?

添加fetch =" EXTRA_LAZY"对于非拥有方的指令,它完全被忽略,因为我现在知道它应该是。我认为这应该在文档中更清楚地说明。

在详尽的搜索之后,我找不到任何文章在任何地方解释这一点,所以我说这可能值得对文档进行修改?

在我们的使用案例中,它制作了一个特别密集的处理块,其中使用了大量的包含'由于超出内存限制而不断崩溃的一个快速进程现在执行的速度提高了几个数量级。

希望这些信息可以帮助那些人...