我刚开始玩 Doctrine ORM 库,并且正在学习表之间的所有关联。
所以我坚持单向和双向关系的差异。
据我了解,单向关系仅在一侧具有主键,而那一侧是拥有侧,对吗?并且双向关系在两个表中都有主键,因此您可以从两侧建立关系,并在两侧设置约束。
现在,我正在阅读有关关系的 Doctrine 文档,并且您有: 单向和双向关联。
但是它们生成相同的 SQL,以及具有相同主键和约束的相同表。所以我真的看不出这两者有什么区别。两个例子的一侧都有主键。
据我所知,真正的双向关系应该在两个表中都有指向另一个表的主键,对吗?并且在 Doctrine 文档中给出的示例并非如此。这两个例子给出了相同的结果并且是相同的。
所以我所做的是,假设我有用户和卡实体,并且希望关系是 OneToOne 双向的。
/**
* @Entity
* @Table(name="users")
*/
class User
{
/**
* @Id
* @GeneratedValue
* @Column(type="bigint")
*/
protected $id;
/**
* @OneToOne(targetEntity="Card", mappedBy="User")
* @JoinColumn(name="card_id", referencedColumnName="id")
*/
protected $card;
/**
* @Column(name="user_name", type="string")
*/
protected $userName;
/**
* @Column(name="user_pass", type="string")
*/
protected $userPass;
}
/**
* @Entity
* @Table(name="cards")
*/
class Card
{
/**
* @Id
* @GeneratedValue
* @Column(type="bigint")
*/
protected $id;
/**
* @OneToOne(targetEntity="User", inversedBy="Card")
* @JoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
/**
* @Column(name="post_title", type="string")
*/
protected $cardType;
}
这里的区别是我在两个对象/实体中都写了@JoinColumn。在教义示例中只有一个。现在我会得到我认为的双向关系。如果我查看 EER 图,我可以看到一条线从用户指向卡,另一条从卡指向用户。
所以基本上我做对了吗?教义文档有错吗?:D 双向 OneToOne 关系如何在 EER 图中显示?
谢谢!