Как использовать char вместо varchar при генерации таблиц db из сущностей?

Я использую string(32) вместо integer для объекта entity id (он моделирует тип guid). Но после создания таблицы базы данных из типа поля идентификаторов объекта установлено значение varchar(32). Я думаю, что это не лучшая идея, guid всегда имеет длину = 32, поэтому тип char будет более подходящим.

Есть ли способ сказать Doctrine для использования char или единственный способ изменить его вручную в базе данных?

Ответы

Ответ 1

Хотя решение althaus прекрасно работает, я думаю, что это должен быть канонический способ сделать это:

С аннотациями:

/**
 * @Column(type="string", length=2, options={"fixed" = true})
 */
protected $country;

С YAML (пример поля ID и не ID):

Your\Nice\Entity:
    id:
        id:
            type: string
            length: 32
            options:
                fixed: true
    fields:
        country:
            type: string
            length: 2
            options:
                fixed: true
  • параметры: массив дополнительных параметров:
    • fixed: логическое значение для определения того, должна ли быть указана или изменена заданная длина столбца строки (применяется только для столбца строка/двоичный код и может не поддерживаться всеми поставщиками).

Официальная документация

Ответ 2

Вы можете указать Doctrine для использования типов полей конкретного поставщика:

/**
 * @Column(type="string", columnDefinition="CHAR(2) NOT NULL")
 */
protected $country;

Источник