Как принудительно или «намекнуть», что поле объекта должно быть проиндексировано в yaml?

#doctrine #doctrine-orm #yaml

#доктрина #доктрина-orm #yaml

Вопрос:

Есть ли в Doctrine 2 какой-либо способ намекнуть, что столбец должен быть проиндексирован при автоматическом создании базы данных? У меня есть объект потока:

 EntitiesThread:
  type: entity
  table: Thread
  repositoryClass: RepositoriesThreadRepository
  id:
    id:
      type: integer
      generator:
        strategy: AUTO
  fields:
    type:
      type: enumthreadtype
    code:
      type: string
      length: 10
      nullable: true
  manyToOne:
    group:
      targetEntity: Group
      inversedBy: threads
  oneToMany:
    messages:
      targetEntity: Message
      mappedBy: thread
    attachments:
      targetEntity: ThreadAttachment
      mappedBy: thread
  

Потоки часто ищутся по их «коду» — случайной строке из 10 символов — а не по их идентификатору. Есть ли какой-либо способ указать, что индекс должен быть создан с использованием yaml, или мне просто нужно сделать это в моей базе данных после создания таблицы?

Ответ №1:

Я не смог найти документацию для этого в yaml, но после прочтения DoctrineORMMappingClassMetadatainfo я понял, что это выглядит следующим образом

Если бы вы хотели проиндексировать свое кодовое поле, ваше сопоставление yaml было бы следующим

 EntitiesThread:
  type: entity
  table: Thread
  indexes:
      # _idx as suffix...
      thread_code_idx:
          columns: [ code ]
      # We can specify multiple indexes 
      another_idx
          # we can specify multiple columns for compound indexes
          columns [ type, code ] 
  repositoryClass: RepositoriesThreadRepository
  id:
    id:
      type: integer
      generator:
        strategy: AUTO
  fields:
    type:
      type: enumthreadtype
    code:
      type: string
      length: 10
      nullable: true
  manyToOne:
    group:
      targetEntity: Group
      inversedBy: threads
  oneToMany:
    messages:
      targetEntity: Message
      mappedBy: thread
    attachments:
      targetEntity: ThreadAttachment
      mappedBy: thread