#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 для дальнейшего ознакомления.