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, но все же это может быть не оптимальное решение.