我正在尝试为我的实体设置一个新字段,它是一个布尔数组。我是这样定义的:
/**
* @var bool[] $groupe_jours Selected days for the groups
* @ORM\Column(type="array")
*/
protected $groupe_jours;
我在构造函数中添加了初始化:
/** @ignore */
public function __construct()
{
$this->groupe_jours = array();
}
现在我想进行迁移
php app/console doctrine:migrations:diff
php app/console doctrine:migrations:migrate
这会正确更新数据库:
ALTER TABLE licensee ADD groupe_jours LONGTEXT NOT NULL COMMENT '(DC2Type:array)'
但是,当我尝试重新加载页面时,我收到如下错误:
无法将数据库值“”转换为 Doctrine 类型数组
这是因为当数组为空时,数组类型需要特定的字符串,例如:
'a:0:{}'
确保迁移正确更新列的最佳方法是什么?
我找到了一个答案,但我很确定还有更好的答案。
在创建的迁移文件中,在函数
public function up(Schema $schema)
中,之后:
$this->addSql('ALTER TABLE licensee ADD groupe_jours LONGTEXT NOT NULL COMMENT \'(DC2Typ
我补充说:
$this->addSql('UPDATE licensee SET groupe_jours = \'a:0:{}\'');
但我很确定有更好的解决方案,因为这个看起来像是一个黑客......
如果您想编写 Doctrine 迁移来添加具有默认值的非空数组字段,您可以使用以下语法:
$table = $schema->getTable('my_table');
$table->addColumn('my_field', 'array', [
'notnull' => true,
'comment' => '(DC2Type:array)',
'default' => serialize([]),
]);