Doctrine DBAL`simple_array`类型未转换

时间:2016-11-23 15:39:08

标签: php orm doctrine-orm doctrine dbal

我有一个类型为" simple_array"的列。在我的架构定义中:

public function up(Schema $schema)
{
    $users = $schema->createTable('users');
    $users->addColumn('id', 'integer', ['unsigned' => true,
       'autoincrement' => true]);
    $users->addColumn('email', 'string', ['length' => 100]);
    $users->addColumn('roles', 'simple_array');
    $users->setPrimaryKey(['id']);
}

使用上面的代码,我能够生成如下表:

enter image description here

现在,在我的代码中的某处,我为该users表插入了一条记录:

$connection->insert('users', ['email' => 'a@b.c', 'roles' => ['admin', 'editor']]);

我能够成功执行该插入调用。但事实是,roles列并未存储为承诺的学说文档 - see simple_array in Doctrine Types。以下是它实际存储在我身上的方式:

enter image description here

我追踪了Doctrine的核心代码库,我无法找到任何转换变换器代码的提示,并且#34; simple_array"键入逗号 - 内爆字符串。

之前我和Doctrine ORM一起工作过,这很好。这是Doctrine ORM实现的东西,而不是Doctrine DBAL本身吗?如果是这样,应该如何在DBAL中完成?手动?

感谢。

1 个答案:

答案 0 :(得分:0)

我认为它位于:dbal\lib\Doctrine\DBAL\Types\SimpleArrayType.php第45-57行,函数convertToDatabaseValueconvertToPHPValue

可能因为您使用的是低级功能(DBAL),它不会自动触发。 (所以你可能需要在这里添加第三个参数) $connection->insert('users', ['email' => 'a@b.c', 'roles' => ['admin', 'editor']], ['email' => Type::STRING, 'roles' => Type::SIMPLE_ARRAY]);