我正在使用 Doctrine 2.1,其中支持通过外部实体的身份(外键作为标识符)。
是否可以通过具有双向关系的外国实体进行身份识别?我正在尝试,但在加载数据设备时出现以下错误:
[PDO异常]
SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(
table
.user
, CONSTRAINTFK_187DDE86BF396750
FOREIGN KEY (id
) REFERENCESaddress
(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:
我希望能够从任一侧(双向)设置关系,但这似乎不可能。
老实说,我不确定关系的反面的意义是什么,因为“仅对关联的反面所做的更改被忽略”。
取自这里的文档:http: //docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/association-mapping.html#owning-side-and-inverse-side
重点是什么?
从应用程序的角度来看,这样做似乎更有意义:
$user->setAddress($address);
而不是:
$address->setUser($user);
但是第一个是不可能的,因为:
- 使关系双向刹车
User
一面必须是反面,所以无论如何$user->setAddress($address);
都会被忽略!
请有人解释一下:)
马修