【发布时间】:2012-08-31 06:39:02
【问题描述】:
我正在使用 Doctrine 2.1,其中支持通过外部实体进行身份验证(外键作为标识符)。
是否可以通过具有双向关系的外国实体进行身份识别?我正在尝试,但在加载数据设备时出现以下错误:
[PDO异常]
SQLSTATE[23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(
table.user,CONSTRAINTFK_187DDE86BF396750FOREIGN KEY(id)参考address(user_id))
这是我的实体:
/**
* @Entity
*/
class User
{
/** @Id @Column(type="integer") @GeneratedValue */
private $id;
/** @OneToOne(targetEntity="Address") */
private $address;
}
/**
* @Entity
*/
class Address
{
/** @Id @OneToOne(targetEntity="User") */
private $user;
}
如果我删除用户对地址的引用,错误就会消失!
我希望能够做到以下几点:
$address = $user->getAddress();
..但似乎我必须这样做:
$address = $entityManager->find('Address', $user->getId());
对吗?有没有办法做到这一点?
更新 1:
我希望能够从任一侧(双向)设置关系,但这似乎不可能。
老实说,我不确定关系的反面是什么意思,因为“仅对关联反面所做的更改会被忽略”。
有什么意义?
从应用程序的角度来看,这样做似乎更有意义:
$user->setAddress($address);
而不是:
$address->setUser($user);
但是第一个是不可能的,因为:
- 使关系双向刹车
-
User的一面必须是反面,所以$user->setAddress($address);无论如何都会被忽略!!
有人能解释一下吗:)
马修
【问题讨论】:
标签: php doctrine-orm foreign-keys