我有一个类型为" 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']);
}
使用上面的代码,我能够生成如下表:
现在,在我的代码中的某处,我为该users
表插入了一条记录:
$connection->insert('users', ['email' => 'a@b.c', 'roles' => ['admin', 'editor']]);
我能够成功执行该插入调用。但事实是,roles
列并未存储为承诺的学说文档 - see simple_array in Doctrine Types。以下是它实际存储在我身上的方式:
我追踪了Doctrine的核心代码库,我无法找到任何转换变换器代码的提示,并且#34; simple_array"键入逗号 - 内爆字符串。
之前我和Doctrine ORM一起工作过,这很好。这是Doctrine ORM实现的东西,而不是Doctrine DBAL本身吗?如果是这样,应该如何在DBAL中完成?手动?
感谢。
答案 0 :(得分:0)
我认为它位于:dbal\lib\Doctrine\DBAL\Types\SimpleArrayType.php
第45-57行,函数convertToDatabaseValue
和convertToPHPValue
。
可能因为您使用的是低级功能(DBAL),它不会自动触发。 (所以你可能需要在这里添加第三个参数)
$connection->insert('users', ['email' => 'a@b.c', 'roles' => ['admin', 'editor']], ['email' => Type::STRING, 'roles' => Type::SIMPLE_ARRAY]);