Php 原则2防止重复记录的ODM
这里是NOOB,试图找出如何在EmbedMany属性中防止重复记录。我有这样一种根深蒂固的想法:Php 原则2防止重复记录的ODM,php,mongodb,doctrine-orm,Php,Mongodb,Doctrine Orm,这里是NOOB,试图找出如何在EmbedMany属性中防止重复记录。我有这样一种根深蒂固的想法: <? /** * @EmbeddedDocument */ class Contact { /** * @Id */ private $id; /** * created timestamp * @Date */ private $created; /** * modified timestamp * @Date */ private $modified; /**
<?
/**
* @EmbeddedDocument
*/
class Contact {
/**
* @Id
*/
private $id;
/**
* created timestamp
* @Date
*/
private $created;
/**
* modified timestamp
* @Date
*/
private $modified;
/**
* @String
*/
private $name;
/**
* @String
*/
private $name;
/**
* @String
*/
private $address;
}
db.users.find({ userId: "userId" ,
contacts.name: "new contact name",
contacts.address: "new contact address"}).count();
保存文档之前,您应该验证文档
例如,如果用户使用name=“name”和address=“address”添加联系人,您应该在mongodb中检查是否存在此类联系人。若它存在,只需显示验证消息,否则将联系人添加到嵌入式联系人数组中
所以,假设您有一个用户集合,其中包含嵌入的联系人数组。要验证新联系人是否存在,您可以发送如下请求:
<?
/**
* @EmbeddedDocument
*/
class Contact {
/**
* @Id
*/
private $id;
/**
* created timestamp
* @Date
*/
private $created;
/**
* modified timestamp
* @Date
*/
private $modified;
/**
* @String
*/
private $name;
/**
* @String
*/
private $name;
/**
* @String
*/
private $address;
}
db.users.find({ userId: "userId" ,
contacts.name: "new contact name",
contacts.address: "new contact address"}).count();
如果上述查询将返回count>=1,则无需添加新联系人,只需显示验证。您可以实现一个事件侦听器,它将侦听preUpdate和prePersist事件。
在您的活动中,您可以自己检查。是!我知道如何使用mongo。但教条能为我做到这一点吗?我不想把这样的逻辑放在实体中,那么它去了哪里?但我真的希望条令能帮我做到。@Fatmuemoo:你可以创建一些服务并将验证逻辑放在那里。我猜条令不能为你做这件事,但我不是条令专家。我倾向于在父文档上做这件事。。。我还将研究在定制回购类中执行此操作。。。这比在实体中做更好,因为你是对的,不要在实体中做。我说的是13.5节中关于简化s事件侦听器的内容,而不是生命周期回调。是的!我想这就是我要找的。它是一个可以处理事件的外部类。我喜欢。我发现这篇文章很有用: