Я использую аннотацию сущности доктрины для генерации и обновления моей схемы, и у меня есть проблема с полем enum
Вот моя сущность
Мой класс пользователя:
<?php
namespace Schematify\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="users")
*/
class User
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @var int
*/
protected $id;
/** @ORM\Column(length=250) */
protected $email = '';
/** @ORM\Column(length=32,options={"default":""}) */
protected $pasword = '';
/** @ORM\Column(type="string", columnDefinition="ENUM('visible', 'invisible')") */
protected $status = '';}
Я разработал команду cli с именем console.php, чтобы вызвать все обновления инструмента схемы. Когда я печатаю php console.php orm:schema-tool:update --force
всегда есть 1 запрос для выполнения:
ALTER TABLE users CHANGE status status ENUM('visible', 'invisible');
Я использую базу данных MySQL, и весь мой код доступен здесь: https://github.com/talkspiritlab/schematify
Спасибо
Чтобы обеспечить правильную поддержку enum, даже в инструментах схемы / миграции, вы должны реализовать собственный тип для каждого перечисления, как описано в Второе решение в официальной документации.
В дополнение к этому, не забудьте пометить их как комментарии:
Type::addType($name, $class);
$platform->registerDoctrineTypeMapping($name, $name);
$platform->markDoctrineTypeCommented($name);
Если только вы не используете очень новую версию DBAL, которая включает этот коммит, тогда вам не нужно отмечать как требующий комментарий. На момент написания статьи это был бы мастер (или гипотетическое будущее v2.6).
Других решений пока нет …