【问题标题】:Postgres array handling in Doctrine 2, Symfony 2.2Doctrine 2、Symfony 2.2 中的 Postgres 数组处理
【发布时间】:2013-06-21 14:55:31
【问题描述】:

我正在尝试在 postgres 数据库中使用整数数组数据类型,使用 Doctrine 2 作为 ORM。最初,我在 Symfony 中将表单字段创建为实体类型,并假设实体是此错误的根源:

request.CRITICAL: Doctrine\DBAL\DBALException: An exception occurred while executing 'INSERT INTO actions (bundle_key, name, type, num_installs, countries, enabled) VALUES (?, ?, ?, ?, ?, ?)' with params ["05e4a7e5", "sfsdfdsfs", "1", "3", "O:43:\"Doctrine\\Common\\Collections\\ArrayCollection\":1:{s:54:\"\u0000Doctrine\\Common\\Collections\\ArrayCollection\u0000_elements\";a:3:{i:0;O:39:\"... truncated for SO question ...Bundle\\Entity\\Country\u0000latitude\";s:5:\"18.25\";s:50:\"\u0000AirInstaller\\AdminBundle\\Entity\\Country\u0000longitude\";s:8:\"-63.1667\";}}}", "true"]:

SQLSTATE[22P02]: Invalid text representation: 7 ERROR: array value must start with "{" or dimension information (uncaught exception) at /Users/steveadams/Sites/airinstaller/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php line 47 [] []

在看到疯狂的序列化过程后,我决定尝试通过构建一个选择字段来将国家/地区存储为它们的 id,这样该字段就不会被解释为实体。这也失败了。然后我决定检查文档,我发现在教义中的数组支持实际上只是一个 php 数组的序列化字符串!如果我的列类型实际上是数据库中的数组,这根本不起作用。

所以我的难题是:我是否创建一个自定义映射类型,以适当的格式存储这些国家/地区以用于 postgres 整数[]:{2,13,26,43}

或者我是否要求我的数据库管理员将列更改为字符并存储 Doctrine 想要使用的序列化数组?好像太脏了。

无论哪种情况,我都很失望。我想我做错了什么,因为这里的底线是 Doctrine 不支持开箱即用的 integer[]。真的是这样吗?

感谢您的任何意见!

【问题讨论】:

  • 这不是正常的“教条”。通常,您会创建一个国家实体,然后使用外键保持关联。您可能会使用多对多关系来处理您在上面所做的事情。数组方法有点像扁平化的数据库。如果无法修改数据模型,则可以通过构建字符串来构建查询。

标签: postgresql symfony doctrine-orm


【解决方案1】:

这是我决定做的。

由于我放弃了关系并选择为国家/地区存储平面 id 数组,我的选择只是编写一个自定义映射类型,它对数据类型进行基本断言并以字符串格式编写一个 postgres 友好的 id 数组。我做了一些清理工作以确保 ids 引用数据库中的真实国家,因此不幸的是,Doctrine 不再完成这项工作。从好的方面来说,这是一个与新数据库无缝协作的简单过程。

映射类型对于多维数组是递归的,所以它适用于相当复杂的数据。不幸的是,这些数据不能基于 Doctrine 模型,因此利用了该框架的好处。这似乎是一个权衡的问题。在我所有的研究中,将 Doctrine 与一些 postgres 的数据类型轻松集成似乎基本上是不可能的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 2015-04-18
    • 2012-01-22
    • 2013-07-02
    • 1970-01-01
    相关资源
    最近更新 更多