доктрина 2 ODM, предотвращающая дублирование записи - PullRequest
6 голосов
/ 17 июня 2011

Doctrine NOOB здесь, пытаясь выяснить, как предотвратить дублирование записи в свойстве embed many.У меня есть EmbededDocment:

<?
/**
 * @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;
 }

Когда я добавляю новый контакт, я хочу, чтобы два контакта имели одинаковое имя, два контакта могли иметь одинаковый адрес, но два контакта не может иметь то же имя и адрес.При проверке на наличие дубликатов доктрине нужно будет игнорировать свойства $ id, $ созданный и $ измененный, поскольку они почти всегда будут различаться.Это комбинация всех других полей, которые должны быть уникальными.Как это можно сделать , используя доктрину ? Эта логика принадлежит служебному слою или может доктрина сделать это для меня?

ОБНОВЛЕНИЕ: Я принимаю, что ответ Эндрю является правильным способом проверки на дублированиеиспользуя Монго, я действительно хочу знать, может ли доктрина сделать это для меня.Поэтому я начинаю вознаграждение.

Ответы [ 2 ]

1 голос
/ 22 июня 2011

Вы можете реализовать прослушиватель событий, который будет прослушивать события preUpdate и prePersist.http://www.doctrine -project.org / docs / mongodb_odm / 1.0 / en / reference / events.html

В вашем мероприятии вы можете выполнить свою собственную проверку.

1 голос
/ 17 июня 2011

Вы должны проверить свой документ перед его сохранением.

Например, если пользователь добавляет Контакт с именем = "Имя" и адресом = "Адрес", вы должны проверить в mongodb, если такой Контакт существует.И в случае, если он существует, вы просто показываете сообщение проверки, в противном случае вы добавляете контакт во встроенный массив контактов.

Итак, предположим, у вас есть коллекция пользователей, которая содержит встроенный массив контактов.Чтобы убедиться, что новый контакт существует / не существует, вы можете отправить запрос следующим образом:

db.users.find({ userId: "userId" , 
                contacts.name: "new contact name", 
                contacts.address: "new contact address"}).count();

Если указанный выше запрос вернет количество> = 1, вам не нужно добавлять новый контакт, просто покажите подтверждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...