我想实现应该模拟以下内容的php类: (Symfony的,DoctrineMongoDBBundle)
Notification Collection { from { id , fname } , to , sentDate }
Member Collection { id , fname , lname , email , phone , regDate , ... }
我想告诉ODM:“from field是一个只包含2个值的对象,发送者的id和他的fname”
我必须使用什么注释?我应该定义另一个类如from.php吗?或者我可以创建两个类,如下所示:
/*
*@Document
*/
class Notification {
/*
*@Id
*/
protected $id;
/*
*@EmbedOne(targetDocument="Member")
*/
protected $from;
/*
*@ReferenceOne(targetDocument="Member")
*/
protected $to;
/*
*@Date
*/
protected $sentDate;
}
/*
*@Document
*/
class Member {
/*
*@Id
*/
protected $id;
/*
*@String
*/
protected $fname;
/*
*@String
*/
protected $lname;
/*
*@String
*/
protected $email;
.
.
.
}
如果它是正确的,在我的控制器中如何控制“from”字段以仅保存Member对象的id和fname? 假设:
$senderUser;
$newNotification = new Notification();
$newNotification->setFrom($senderUser);
然后$ newNotification->从set到一个Member对象,其中包含有关Member的所有信息。但是我只希望发送者的id和fname保持不变! (因为我的项目的需要) 请原谅我的英语语法错误。 谢谢你的帮助...
答案 0 :(得分:0)
如果您坚持在from
字段中嵌套通知的原始用户ID和名字,那么您需要与From文档建立Embed One关系,而From文档又包含以下字段:< / p>
id
:这应该是与会员文档的Reference One关系。我建议使用simple
选项作为参考,这样您只存储会员的ID值,而不是DBRef对象。fname
:这应该是一个字符串字段。 ODM无法使其与参考的会员文档保持同步,因此您需要自行确保。就个人而言,通知文档似乎足够小,我只需直接在通知上创建fromMember
和fromMemberFirstName
字段。然后,您可以在setFromMember()
方法中添加一些逻辑,该方法还会从传递的Member参数中设置fromMemberFirstName
字段。
如果您想更进一步,可以使用events来监控成员对象中已更改的fname
字段,并发出查询以更新通知文档,但这是一个单独的对话。