2017-02-13 2 views
0

Итак, вопрос в том, как предоставить два или более идентификаторов ключей? Я не мог найти ответы на этот вопрос в поиске Google ... Вот пример:Symfony, ODM: как установить многократное аннотирование ids

class Customer 
{ 
    /** 
    * @ODM\Id 
    * 
    * @JMS\Expose 
    * @JMS\Type("string") 
    * 
    */ 
    protected $id; 

    /** 
    * @var integer 
    * @ODM\Id(strategy="INCREMENT") 
    * 
    * @JMS\Expose 
    * @JMS\Type("integer") 
    * 
    */ 
    protected $customerId; 

Так что в этом случае у меня есть второй идентификатор, который инкремент, как я уже писал, но первый идентификатор стал нулевым. Если я удалю и напишу только * @ODM\Field(type="integer"), все будет в порядке, но никакого приращения customerId. Итак, как мне получить идентификаторы в документе? Или я ошибаюсь, и я этого не делаю?

ответ

1

Идентификатор автоматически отображается как _id поле, поэтому может быть только 1 поле отображается как @Id.

Выполнено подобное в прошлом, и я предлагаю хранить \MongoId в качестве идентификатора документа и генерировать приращенный customerId в коде вместо того, чтобы полагаться на ODM. Создание такого генератора довольно просто, вам нужно подключиться к прежнему документу (будь то в вашем доменном коде, который я советую, или используя событие prePersist) и генератор записи, подобный ODM IncrementGenerator.

0

Вы можете иметь только два ключа один из строки другого числа как часть составного ключа, в соответствии с этой документацией: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html

Так попробовать:

class Customer 
{ 
    /** 
    * @ODM\Id 
    * @ORM\Column(name="id", type="string") 
    * 
    * @JMS\Expose 
    * @JMS\Type("string") 
    * 
    */ 
    protected $id; 

    /** 
    * @var integer 
    * @ODM\Id(strategy="INCREMENT") 
    * @ORM\Column(name="customerId", type="integer") 
    * 
    * @JMS\Expose 
    * @JMS\Type("integer") 
    * 
    */ 
    protected $customerId; 

Я думаю, что должно работать вы.

+0

Будьте внимательны! Я не использую ODM, поэтому нотация ORM не имеет смысла, а решения для ORM не могут быть реализованы для нотации ODM. Я использую только ODM, только mongodb. –

+1

Извините, у вашего сообщения был пример с 'ORM', поэтому я ошибся. Я сделал поиск в Интернете, и я считаю, что Doctrine с ODM не поддерживает составные идентификаторы. Однако я нашел эту ссылку: http://stackoverflow.com/questions/7222062/mongodb-composite-key/7225657#7225657, которая может быть вам полезна. Я могу удалить свой ответ, если вы считаете, что он неподходящий, и опубликуйте, что находится в этой ссылке в качестве ответа. –

Смежные вопросы