学说2。加载实体和子女人数

问题描述 投票:1回答:2

我有这两个实体。

消息实体

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实体中建立一个关系来获取一个消息集合。但我不知道是否有必要只获取大小。

php count doctrine-orm
2个回答
2
投票

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

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

你可以在这里阅读关于额外的懒惰集合。https:/www.doctrine-project.orgprojectsdoctrine-ormen2.7tutorialsextra-lazy-associations.html


0
投票

我最近一直在尝试让EXTRA_LAZY加载工作,并发现了一个我认为是相当大的错误的文档,如页面所示:-。

http:/www.doctrine-project.orgdocsorm2.1entutorialsextra-lazy-associations.html

我希望大多数Doctrine用户都能意识到fetch="EXTRA_LAZY "需要放在ManyToMany关系的 "拥有 "侧,但这个例子显示注释被添加到包含 "mappedBy "的行中,而这个行不是拥有侧。

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

我找不到任何地方有文章解释这个问题,所以我想说这可能值得修改文档。

在我们的使用案例中,它使一个使用了大量 "包含 "调用的特别密集的处理块,由于超过内存限制而不断崩溃,变成了一个快速处理,现在执行速度快了好几个数量级。

希望这些信息能帮助到大家......

© www.soinside.com 2019 - 2024. All rights reserved.