【发布时间】: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