我想实现类表继承:
/**
* Foo
*
* @ORM\Table(name="foos", ...)
* @ORM\Entity
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap({
* "bar" = "Bar",
* "buz" = "Buz"
* })
*/
abstract class Foo
{
...
}
因为我采用了“代码优先”的方法,所以数据库是由条令生成的:
$ bin/console doctrine:migrations:diff
$ bin/console doctrine:migrations:migrate
鉴别器列 foos.type
获取类型 VARCHAR(255)
. 我想让它有一个 ENUM
相反。
如何为实体类定义注解以获取 ENUM
鉴别器?
2条答案
按热度按时间gab6jxml1#
回答有点晚,但解决方案是注册一个自定义Map类型,它将在数据库端实际使用enum。最简单的是:
在你的条令配置中的一些
your_type
名称和用途:默认情况下,此字段不为空。对于mysql,它将使用enum中的第一个值作为默认值,就像“隐式默认值”
d7v8vwbk2#
它与
columnDefinition="ENUM('bar', 'buz')"
:不幸的是,它会引起令人讨厌的副作用。同样在这里):理论的迁移机制似乎可以处理
ENUM
这是不正确的。这个doctrine:migrations:diff
命令创建如下迁移:我执行了它
type
列成为ENUM
. 但是一个新的doctrine:migrations:diff
再次创建具有相同内容的迁移。。。意思是说,条令“想”,栏目还在VARCHAR
.