【问题标题】:Doctrine DBAL `simple_array` type is not transformedDoctrine DBAL `simple_array` 类型未转换
【发布时间】:2017-04-07 16:53:28
【问题描述】:

我的架构定义中有一个类型为“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 的核心代码库,但我真的找不到任何关于将“simple_array”类型转换为逗号内爆字符串的转换器代码提示。

我之前使用过 Doctrine ORM,并且效果很好。这是 Doctrine ORM 实现的东西,而不是 Doctrine DBAL 本身的东西吗?如果是这样,这应该如何在 DBAL 中完成?手动?

谢谢。

【问题讨论】:

    标签: php orm doctrine-orm doctrine dbal


    【解决方案1】:

    我认为它位于: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]);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 2016-07-04
      • 2017-07-20
      • 2021-01-22
      • 2021-04-20
      • 2016-04-16
      • 2016-04-13
      相关资源
      最近更新 更多