迁移的默认数组值

问题描述 投票:0回答:2

我正在尝试为我的实体设置一个新字段,它是一个布尔数组。我是这样定义的:

/**
 * @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:{}'

确保迁移正确更新列的最佳方法是什么?

  1. 我可以指定迁移的默认值吗
  2. 我可以在字段定义中放置迁移应使用的默认值吗?
  3. 我应该手动更新数据库吗?
php arrays symfony
2个回答
4
投票

我找到了一个答案,但我很确定还有更好的答案。

在创建的迁移文件中,在函数

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:{}\'');

但我很确定有更好的解决方案,因为这个看起来像是一个黑客......


0
投票

如果您想编写 Doctrine 迁移来添加具有默认值的非空数组字段,您可以使用以下语法:

$table = $schema->getTable('my_table');
$table->addColumn('my_field', 'array', [
    'notnull' => true,
    'comment' => '(DC2Type:array)',
    'default' => serialize([]),
]);
© www.soinside.com 2019 - 2024. All rights reserved.