我相信有一個簡單的解決方案,但我無法理解發生了什麼事情。我有一個名爲Payment
的實體和另外兩個名爲User
和Household
的實體。ManyToOne映射與教義和未定義的索引警告
A User
有很多Payment
s和和Household
有很多Payment
s。這是使用YAML所有映射爲Payment
的單向多對一的關係,這樣的(希望這是在http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/association-mapping.html#many-to-one-unidirectional與指導線) -
Payment:
type: entity
table: payments
id:
_id:
type: integer
column: payment_id
generator:
strategy: AUTO
manyToOne:
_user:
targetEntity: Application_Model_User
joinColumn:
name: user_id
referencedColumnName: payment_id
_household:
targetEntity: Application_Model_Household
joinColumn:
name: household_id
referencedColumnName: payment_id
數據庫明智的,我有三個表,users
,payments
和households
。 payments
表(除了它的主鍵外)有兩列,分別稱爲user_id
和household_id
,它們與其他兩個表的主鍵相對應。
的問題是,當我嘗試堅持新Payment
我得到一個錯誤回來從MySQL告訴我的payments
的user_id
列不能爲空。一些挖掘已經確定該原則在INSERT語句中爲user_id
和household_id
提供null
。對象圖絕對正確。
此外,我得到以下警告:
Notice: Undefined index: payment_id in [..]/library/Doctrine/ORM/Persisters/BasicEntityPersister.php on line 511
Notice: Undefined index: in [..]/library/Doctrine/ORM/Persisters/BasicEntityPersister.php on line 511
Notice: Undefined index: payment_id in [..]/library/Doctrine/ORM/Persisters/BasicEntityPersister.php on line 511
Notice: Undefined index: in [..]/library/Doctrine/ORM/Persisters/BasicEntityPersister.php on line 511
我已經確定有問題的payment_id
從referencedColumnName
在我的映射來了,該指數是不確定的,因爲數組學說搜索包含來自對面的一側的關係,即Household
或User
。但肯定不應該是?我認爲我遵循了指南,但我無法完成工作。
我使用Zend框架,如果有幫助,但沒有什麼特別的我的代碼。我很確定這是一個映射問題。
感謝
支付表*中的主鍵列被稱爲'payment_id' - 所以這就是referencedColumnName應該是什麼,對嗎? – Jez 2012-07-05 15:21:09
不,在這種情況下,您正在映射付款和家庭表之間的外鍵關係。如果您的付款表上的主鍵是'payments.payment_id',那沒什麼問題(儘管我認爲Doctrine強制將id作爲主鍵名) - 但付款主鍵並不是必需的。 你實際上映射的是FK關係,所以在這種情況下'payments.household_id'引用了您的家庭表的id列(我將假定它的名字相似:'households.household_id'。 – 2012-07-05 15:53:53
我已經編輯我的答案,以說明我說得更清楚 – 2012-07-05 16:01:19