具有长度行为

时间:2017-10-26 14:37:18

标签: php symfony doctrine-orm

也许这种行为是一个错误或我自己的无知,但我只是遇到了这个并希望有人有一些见解。

我最近在一个名为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的过度讨论还是我错过了什么?

1 个答案:

答案 0 :(得分:0)

通过查看the documentation,您可以看到,如果您未指定length,则默认为255

文档还指出here如果length<= 255,则会使用TINYTEXT类型。