Я делаю заявку в Symfony2
и используя комплект doctrine mongodb odm
. Я создал документ с идентификатором, который не имеет стратегии = NONE, как (только сниппета):Предотвратите повышение, когда указан идентификатор mongodb odm
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
* @MongoDB\Id(strategy="NONE")
* @var string
*/
private $id;
Позже при вставке, каждый раз, когда я указать идентификатор перед вызовом сохраняются, после проверки журналов я считаю, что upsert был сделан вместо batchInsert. После некоторого поиска в Google я столкнулся с this link, который подтвердил мне, что это на самом деле случай по дизайну.
Поэтому мой вопрос: как избежать ошибки после того, как я укажу идентификатор объекта?
Пс: Мне нужно это, потому что с обновлением doctrine mongodb odm
будет обновляться, если он найдет идентификатор уже там, но я хочу, чтобы он увидел такой дубликат и бросил MongoDuplicateKeyException
.
Спасибо за ваш ответ; определенно чувствует, как направление, которое я должен предпринять. Моя единственная проблема заключается в том, что я не могу понять, как (в моем генераторе идентификаторов, который расширяет «Doctrine \ ODM \ MongoDB \ Id \ AbstractIdGenerator'), чтобы использовать' $ param' в 'setId ($ param) 'call, в моем конечном id. – anka
Я не уверен, что вы называете '$ param'? Вообще говоря, вашему генератору необходимо вернуть идентификатор, ODM позже установит его в документе. – malarzm
Еще раз спасибо [malarzm] (http://stackoverflow.com/users/5982920/malarzm) за помощь. Под '$ param' я подразумеваю значение, которое я намереваюсь установить как идентификатор' $ object', прежде чем передать его на сохранение, например 'persist ($ object)'. Вызов setId будет похож на '$ object-> setId ($ param)', где-то после создания экземпляра '$ object', но перед' persist ($ object) '. Есть ли способ получить доступ к этому значению ('$ param') внутри генератора? – anka