0

我正在尝试在 postgres DB 中使用整数数组数据类型,使用 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[]。真的是这样吗?

感谢您的任何意见!

4

1 回答 1

0

这是我决定做的。

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

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

于 2013-06-25T20:40:15.810 回答