也许这种行为是一个错误或我自己的无知,但我只是遇到了这个并希望有人有一些见解。
我最近在一个名为notes
的现有实体中添加了一个属性,我想要一个文本属性(不是一个长度为的字符串),因为它会有未知的数据量。我懒惰并复制了实体中的现有title属性,将名称和表映射更改为'notes',但忘记删除注释中的length
属性,所以我最终得到了这个...
/**
* @var string
*
* @ORM\Column(name="notes", type="text", length=255, nullable=true)
*/
private $notes;
我更新了架构并开始在现有实体上填充notes
并注意到它们被截断,意识到我的错误,删除了length属性,清除了元数据缓存,然后更新了我收到的架构:
无需更新 - 您的数据库已与当前实体元数据同步。
果然,我的实体中不再有长度属性,但notes
仍然被截断。
检查表后,我发现notes
列是 TINYTEXT ,因此这就是问题所在。我手动将其更改为 LONGTEXT 并解决问题。
所以我的问题是:
为什么在没有length属性的情况下运行php bin/console doctrine:schema:update --force
(即使在清除了doctrine的元数据缓存之后)也没有从TINYTEXT将列更改为LONGTEXT?
这是对Doctrine的过度讨论还是我错过了什么?
答案 0 :(得分:0)
通过查看the documentation,您可以看到,如果您未指定length
,则默认为255
。
文档还指出here如果length
为<= 255
,则会使用TINYTEXT
类型。