ReferenceMany对象的按需加载

时间:2012-08-27 19:22:30

标签: php mongodb doctrine doctrine-orm odm

我是ORM的新手,但对其可能性已经印象深刻。

在设计类似Facebook的消息系统(允许多个用户聊天的消息线程)时,我遇到了一个我不知道如何解决的问题。

用DocumentManager :: find(...)加载MessageThread后,我得到了包含所有消息的整个MessageThread对象。由于内存限制,这可能不是一个好主意。

所以我的问题是,是否有一种方法,如何按需动态加载消息,所以我得到了MessageThread对象,但是当访问messages属性时,它们可能是动态加载的,也许是50个消息的包中?

谢谢。

这些是User,Message和MessageThread类。

使用Doctrine MongoDB ODM

class User {
    /** @Id */
    protected $id;  
}

class Message
{
    /** @Id */
    protected $id;

    /** @ReferenceOne(targetDocument="User") */
    protected $sender;

    /** @String */
    protected $body;

    /** @Date */
    protected $sent;

    /** @EmbedMany */
    protected $read;
}


class MessageThread
{
     /** @Id */
     protected $id;

     ...

     /** @ReferenceMany(targetDocument="User") */
     protected $participants;

     //Maybe EmbedMany is better in this case
     /**
     * @ReferenceMany(
     *      targetDocument="Message",
     * )
     */
     protected $messages;

     ...
}

0 个答案:

没有答案