ManyToOne映射与Doctrine和未定义的索引警告

时间:2012-07-05 14:36:58

标签: php doctrine-orm

我确信这有一个简单的解决方案,但我无法理解正在发生的事情。我有一个名为Payment的实体和另外两个名为UserHousehold的实体。

UserPaymentHouseholdPaymentPayment个。这全部映射为使用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

数据库方面,我有三个表,paymentshouseholdspaymentsuser_id表(除了它的主键之外)有两列名为household_idPayment,它们对应于其他两个表的主键。

问题在于,当我尝试保留新的user_id时,我从mySql收到错误,告诉我payments null列不能为空。一些挖掘已经确定,学说在INSERT语句中为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 。对象图肯定是正确的。

此外,我收到以下警告:

payment_id

我已经确定有问题的referencedColumnName来自我的映射中的Household,并且索引未定义,因为数组原则正在搜索包含来自的字段关系的方面,即User或{{1}}。但肯定不应该这样吗?我想我已经遵循了指南,但我无法使其发挥作用。

我正在使用Zend Framework,如果它有帮助,但我的代码没有什么特别之处。我很确定这是一个映射问题。

由于

1 个答案:

答案 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>

(替换为相应的列名称)