我是 ORM 的新手,但已经对其可能性印象深刻。
在设计类似 Facebook 的消息系统(允许多用户聊天的消息线程)时,我遇到了一个我不知道如何解决的问题。
在我用 DocumentManager::find(...) 加载 MessageThread 后,我得到了包含所有消息的整个 MessageThread 对象。由于内存限制,这可能不是一个好主意。
所以我的问题是,是否有一种方法,如何按需动态加载消息,所以我得到 MessageThread 对象,但是在访问消息属性时,它们可能会以 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;
...
}