Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 原则2防止重复记录的ODM_Php_Mongodb_Doctrine Orm - Fatal编程技术网

Php 原则2防止重复记录的ODM

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; /**

这里是NOOB,试图找出如何在EmbedMany属性中防止重复记录。我有这样一种根深蒂固的想法:

<?
/**
 * @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事件侦听器的内容,而不是生命周期回调。是的!我想这就是我要找的。它是一个可以处理事件的外部类。我喜欢。我发现这篇文章很有用: