3

我想实现应该建模以下内容的 php 类:(Symfony,DoctrineMongoDBBundle)

Notification Collection { from { id , fname } , to , sentDate }

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

我想告诉 ODM:“来自字段是一个只包含 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;

.
.
.
}

如果正确,在我的控制器中,我如何控制“来自”字段以仅保存成员对象的 id 和 fname?假设:

$senderUser;
$newNotification = new Notification();
$newNotification->setFrom($senderUser);

然后 $newNotification->from 设置为一个成员对象,其中包含有关成员的所有信息。但我只希望发件人的 id 和 fname 持续存在!(因为我的项目需要)请原谅我的英语语法错误。谢谢你的帮助...

4

1 回答 1

0

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

  • id:这应该是与成员文档的引用一关系。我建议使用simple参考选项,以便您只存储成员的 ID 值,而不是DBRef对象。
  • fname: 这应该是一个字符串字段。ODM 无法使其与引用的成员文档保持同步,因此您需要自行确保。

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

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

于 2013-08-20T18:49:10.370 回答