ZF2 doctrine2 как использовать тип данных tinyint в столбце сущности
Я использую доктрину 2 ORM с ZF2.
/**
*
* @ORMColumn(type="tinyint", options={"default" = 1})
*/
protected $isActive;
Как я могу создать тип tinyint столбца, как я вижу в поддержка типа данных доктрины, оно не существует.
Commandline># ./vendor/bin/doctrine-module orm:validate-schema
[Mapping] FAIL - The entity-class 'ApplicationEntityUser' mapping is invalid:
* The field 'ApplicationEntityUser#isActive' uses a non-existant type 'tinyint'.
[DoctrineDBALDBALException]
Unknown column type "tinyint" requested. Any Doctrine type that you use has to be registered with DoctrineDBALTypesType::addType(). You can get a list of all the known types with DoctrineDBALTypesType::getTypeMap(). If this
error occurs during database introspection then you might have forgot to register all database types for a Doctrine Type. Use AbstractPlatform#registerDoctrineTypeMapping() or have your custom types implement Type#getMappedDatabaseT
ypes(). If the type name is empty you might have a problem with the cache or forgot some mapping information.
orm:validate-schema
4 ответов
использовать columnDefination, хотя это не идеальное решение, но служит цели.
/**
*
* @ORM\Column(columnDefinition="TINYINT DEFAULT 1 NOT NULL")
*/
protected $isActive;
columnDefinition: фрагмент DDL SQL, который начинается после имени столбца и указывает полный (непереносимый!) определение столбца. Этот атрибут позволяет использовать расширенные функции RMDBS. Однако вы должны тщательно использовать эту функцию и последствия. SchemaTool больше не будет корректно обнаруживать изменения в столбце, если вы используете "columnDefinition".
кроме того, вы должны помнить, что атрибут "type" по-прежнему обрабатывает преобразование между PHP и значениями базы данных. Если вы используете этот атрибут в столбце, который используется для соединений между таблицами, вы также должны взглянуть на @JoinColumn.
Imo вы должны просто использовать тип столбца bool Doctrine затем преобразует это в tinyint в mysql для вас.
/**
* @var bool
* @ORM\Column(type="boolean")
*
* @Form\Exclude()
*/
protected $isActive;
вы также можете определить значение по умолчанию, как так:
...
protected $isActive = true;
...
но вместо этого вы должны установить в своем населении.
нет tinyint
введите доктрину 2. Причина проста:
тип доктрины определяет преобразование между типами PHP и SQL, независимо от используемого поставщика базы данных. Все Типы Отображения этот корабль с доктриной полностью переносится между поддерживаемыми система баз данных.
вы должны выбрать один из этих:
-
integer
: тип, который сопоставляет SQL INT с целым числом PHP. -
smallint
: Тип, который сопоставляет базу данных SMALLINT с целым числом PHP. -
bigint
: тип, который сопоставляет BIGINT базы данных в строку PHP.
официальные документы здесь: http://docs.doctrine-project.org/en/latest/reference/basic-mapping.html#doctrine-mapping-types
здесь есть 2 подхода, я столкнулся со всеми наиболее похожими проблемами, доктрина позволяет создавать любой тип данных, который, по вашему мнению, вам нужен или который не доступен в его пакетах. 2-й подход-использовать небольшой Int, который может быть не оптимальным решением, но я думаю, что он обслуживает puropose. Я видел, что некоторые разработчики также используют тип Int, но все же это может быть не оптимальное решение.