1

我有这两个实体:

消息实体

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()}";

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

4

2 回答 2

2

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

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

您可以在此处阅读有关额外惰性集合的信息:https ://www.doctrine-project.org/projects/doctrine-orm/en/2.7/tutorials/extra-lazy-associations.html

于 2012-07-10T03:43:44.223 回答
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" 指令添加到非拥有方,它会被完全忽略,因为我现在知道它应该是。我认为这应该在文档中更清楚地说明。

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

在我们的用例中,它构成了一个特别密集的处理块,它使用了相当多的“包含”调用,并且由于超出内存限制而不断崩溃,进入一个快速进程,现在执行速度提高了几个数量级。

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

于 2014-03-20T09:24:30.293 回答