我是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;
...
}