Принудительный выбор типа данных доктрины, от tinytext до varchar

#php #mysql #symfony #doctrine-orm

#php #mysql #symfony #doctrine-orm

Вопрос:

Я описал свою сущность с помощью коротких текстовых свойств с фиксированной длиной. Когда я использую команду make:migration , она генерирует SQL-код с TINYTEXT типом данных. В моем случае это будет более точным в использовании VARCHAR , поскольку мои свойства имеют короткую фиксированную длину.

Я искал, но не нашел удовлетворительных решений.

Я хотел бы указать Doctrine использовать VARCHAR для этих текстов. Возможно ли это? Как?

Если я не могу: я вижу это в сгенерированном php-коде для миграции, который предлагает мне отредактировать созданный SQL. Могу ли я перейти TINYTEXT на VARCHAR here? и будет ли доктрина учитывать это для будущих изменений?

 <?php
...
/**
 * @ORMEntity(repositoryClass=UserRepository::class)
 */
class User
{
    /**
     * @ORMId
     * @ORMGeneratedValue
     * @ORMColumn(type="integer")
     */
    private $id;

    /**
     * @ORMColumn(type="text", length=64, unique = true)
     */
    private $mail;

    /**
     * @ORMColumn(type="text", length=64)
     */
    private $hash;

    /**
     * @ORMColumn(type="text", length=32)
     */
    private $salt;

    ...
}
  

MySQL

 CREATE TABLE user (
    id INT AUTO_INCREMENT NOT NULL, 
    mail TINYTEXT NOT NULL, 
    hash TINYTEXT NOT NULL, 
    salt TINYTEXT NOT NULL, 
    UNIQUE INDEX UNIQ_8D93D6495126AC48 (mail), PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB
  

Ответ №1:

Doctrine сопоставляется type="text", length=64 с mysql TINYTEXT .

Вы ищете строковый тип.

 /**
 * @ORMColumn(type="string", length=64, unique=true)
 */
private $mail;
  

Это будет сопоставлено с VARCHAR(64)

См . https://www.doctrine-project.org/projects/doctrine-dbal/en/2.10/reference/types.html#string для дальнейшего ознакомления.