これには簡単な解決策があると確信していますが、何が起こっているのかわかりません。aPaymentと呼ばれるエンティティと、 と と呼ばれる他の 2 つのエンティティがUserありHouseholdます。
AUserには多くPaymentの があり、aHouseholdには多くPaymentの があります。これはすべて、このように YAML を使用する一方向の manyToOne 関係としてマップされます (うまくいけば、これはhttp://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/associationPaymentのガイダンスに沿ったものになります) -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
データベースに関しては、 と の 3 つのテーブルがusersありpaymentsますhouseholds。テーブルには (そのpayments主キーに加えて) と という名前の 2 つの列がuser_idありhousehold_id、これらは他の 2 つのテーブルの主キーに対応しています。
問題は、新しいものを永続化しようとするとPayment、mySql からエラーが返され、のuser_id列をpaymentsnull にすることはできないということです。いくつかの掘り下げにより、教義がINSERT ステートメントのとnullの両方に提供されていることが確立されました。オブジェクトグラフは間違いなく正しいです。user_idhousehold_id
さらに、次の警告が表示されます。
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
問題の がマッピングの spayment_idから来ていること、およびインデックスが定義されていないことを立証しました。これは、配列ドクトリンが検索している関係の反対側、つまり 、またはからのフィールドが含まれているためです。でも、きっとそんなはずないですよね?ガイドに従ったと思いますが、うまくいきません。referencedColumnNameHouseholdUser
私はZend Frameworkを使用していますが、それが役立つ場合は、コードに特別なことは何もありません. マッピングの問題だと確信しています。
ありがとう