Doctrine MongoDB如何注释子文档?

3
我想实现PHP类,可以模拟以下内容: (Symfony,DoctrineMongoDBBundle)
Notification Collection { from { id , fname } , to , sentDate }

Member Collection { id , fname , lname , email , phone , regDate , ... }

我希望告诉ODM:“from字段是一个只包含发送方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”字段仅包含成员对象的id和fname?假设如下:
$senderUser;
$newNotification = new Notification();
$newNotification->setFrom($senderUser);

然后,$newNotification->from被设置为一个包含有关成员所有信息的成员对象。但是,我只想要发送者的ID和名字保留下来!(因为我的项目需要)请原谅我的英语语法错误。感谢任何帮助...

在这种情况下,您应该使用引用。 - Emii Khaos
谢谢@Pazi。如果我在from字段中使用EmbedOne会发生什么?当我为其创建Member实例时,我只分配了我想要的字段。 - ABS
1个回答

0

如果您坚持将通知的原始用户ID和名字嵌套在一个from字段中,那么您需要一个嵌入式一对一关系到一个From文档,该文档具有以下字段:

  • id:这应该是一个引用一对一关系到Member文档。我建议使用simple选项进行引用,这样您只需存储Member的ID值,而不是一个DBRef对象。
  • fname:这应该是一个字符串字段。ODM没有保持它与引用的Member文档同步的功能,因此您需要自己确保。

就我个人而言,通知文档似乎足够小,我会直接在通知上创建fromMemberfromMemberFirstName字段。然后,您可以在setFromMember()方法中添加一些逻辑,从传递的成员参数中设置fromMemberFirstName字段。

如果您想更进一步,可以探索使用events来监视成员对象更改的fname字段,并发出查询以更新通知文档,但这是一个单独的对话。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接