如何在 ORM Symfony 4 中将列的数据类型从 STRING 更改为 TEXT?

How to change the data type of a column from STRING to TEXT in ORM Symfony 4?

我的 table 信息是通过实体的注释定义的。所以我想将以下列更改为文本而不是字符串。所以我有这个:

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $category;

我把它改成这样:

    /**
     * @ORM\Column(type="text")
     */
    private $category;

我原以为它会变成一个文本,所以在迁移后我检查了我的数据库,它说它是一个长文本。我不知道这是怎么可能的,但在引用我的迁移之前,我想知道如何将它变成文本而不是长文本。

编辑:我正在查看迁移文件,我看到了这个: $this->addSql('ALTER TABLE cabinet CHANGE category category LONGTEXT NOT NULL');

我从来没有输入过 LONGTEXT,所以我不知道 Doctrine 从哪里得到它。

答案似乎也是给出 TEXT 的长度(我认为它被定义为一个固定值),所以你应该 @ORM\Column(type="text", length=65535) 而不是 @ORM\Column(type="text")。因为这个 .

我能找到这个答案

如果您想通过迁移进行更改,您需要注意转换为文本将基于当前列的长度;

$table = $schema->getTable("tablename");
$column = $table->getColumn("columnname");
 /** There you need set size of text that you want to use
  *  To TINYTEXT => length =  0 - 255
  *  To TEXT => length = 256 - 65535
  *  To MEDIUMTEXT = 65536 - 16777215
  **/
$column->setLength('65535');
$column->setType(Type::getType(Types::TEXT))

只有当前类型不是Types::TEXT才会改变当前类型。如果你的文本是tinytext,你需要将它设置为文本,你需要先将类型更改为字符串,设置长度,然后再将其设置回文本。