2013-06-21 57 views
0

我想在postgres數據庫中使用整數數組數據類型,使用Doctrine 2作爲ORM。起初,我創建表單字段作爲Symfony的實體類型並且假設實體被這個錯誤的根源:Postgres數組處理在Doctrine 2,Symfony 2.2

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不支持開箱即用的整數[]。這是真的嗎?

感謝您的任何意見!

+0

這不是一個正常的「教條」。通常,您將創建一個國家/地區實體,然後使用外鍵保持關聯。很可能,你會使用多對多的關係來表現你在上面做的事情。數組方法有點像扁平數據庫。如果您的數據模型無法重新加工,您可以通過構建字符串來構建查詢。 – Lighthart

回答

0

這是我決定要做的。

由於我放棄了關係,並選擇爲國家存儲平面數組的id,我的選擇是簡單地編寫一個自定義映射類型,它執行關於數據類型的基本斷言並以字符串格式編寫一個適合postgres的id數組。我做了一些衛生設施,以確保ID參考數據庫中的真實國家,這樣不幸的是工作不再由教義完成。好的一面是,這是一個與新數據庫無縫協作的簡單流程。

映射類型遞歸用於多維數組,因此它適用於相當複雜的數據。不幸的是,這些數據不能基於教義模型,因此利用了該框架的好處。這似乎是一個折衷的問題。在我的所有研究中,看起來根本不可能將Doctrine與一些postgres的數據類型輕鬆整合。

相關問題