I’ve describe my entity with short text properties with fixed length. When I use the command make:migration
, it generates an SQL code with TINYTEXT
datatype. In my case it will be more accurate to use VARCHAR
, as my properties have short fixed length.
I’ve search, but I find no satisfying solutions.
I would like to indicate to Doctrine to use VARCHAR for this texts. Is it possible? How?
If I can’t : I’ve see that in the generated php code for migration that it suggests to make myself edit on the SQL generated. Could I change TINYTEXT
into VARCHAR
here? and will doctrine take it into account for future modifications?
<?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
Advertisement
Answer
Doctrine maps type="text", length=64
to mysql’s TINYTEXT
.
You are looking for the string type.
/** * @ORMColumn(type="string", length=64, unique=true) */ private $mail;
This will be mapped to VARCHAR(64)
See https://www.doctrine-project.org/projects/doctrine-dbal/en/2.10/reference/types.html#string for further reference.