我确信这有一个简单的解决方案,但我无法理解正在发生的事情。我有一个名为Payment
的实体和另外两个名为User
和Household
的实体。
User
有Payment
个Household
,Payment
有Payment
个。这全部映射为使用YAML的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
的单向manyToOne关系,如此(希望这符合http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/association-mapping.html#many-to-one-unidirectional的指导) -
users
数据库方面,我有三个表,payments
,households
和payments
。 user_id
表(除了它的主键之外)有两列名为household_id
和Payment
,它们对应于其他两个表的主键。
问题在于,当我尝试保留新的user_id
时,我从mySql收到错误,告诉我payments
null
列不能为空。一些挖掘已经确定,学说在INSERT语句中为user_id
和household_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
。对象图肯定是正确的。
此外,我收到以下警告:
payment_id
我已经确定有问题的referencedColumnName
来自我的映射中的Household
,并且索引未定义,因为数组原则正在搜索包含来自的字段关系的方面,即User
或{{1}}。但肯定不应该这样吗?我想我已经遵循了指南,但我无法使其发挥作用。
我正在使用Zend Framework,如果它有帮助,但我的代码没有什么特别之处。我很确定这是一个映射问题。
由于
答案 0 :(得分:7)
我只使用过Doctrine + Symfony2,但我认为你的referencedColumnName应该只是“id”而不是payment_id,因为你需要解释外键关系。
payment.household_id
--references - > household.id
。
在Symfony2中,Doctrine有一个'inversedBy'属性,用于映射另一个表中代表payment_id的列。
来自Symfony2 Mapping的代码片段:
/**
* @ORM\ManyToOne(targetEntity="kurtfunai\WalkthroughBundle\Entity\Group", inversedBy="members")
* @ORM\JoinColumn(name="fk_group_id", referencedColumnName="id")
*/
protected $group;
在你的情况下,它需要改为这样的东西:
_user:
targetEntity: Application_Model_User
joinColumn:
name: user_id
referencedColumnName: <USERS_TABLE_PRIMARY_KEY_COLUMN_NAME>
_household:
targetEntity: Application_Model_Household
joinColumn:
name: household_id
referencedColumnName: <HOUSEHOLDS_TABLE_PRIMARY_KEY_COLUMN_NAME>
(替换为相应的列名称)