私はDoctrineORMライブラリをいじり始め、テーブル間のすべての関連付けについて学びました。
だから私は一方向と双方向の関係の違いに固執しました。
私が理解しているように、単方向の関係には片側だけに主キーがあり、その側が所有側ですよね?また、双方向リレーションは両方のテーブルで主キーを持っているため、両側からリレーションを持ち、両側に制約を設定できます。
さて、関係についてのDoctrineのドキュメントを読んでいると、 一方向と双方向の関連付けがあります。
ただし、これらは同じSQLと、同じ主キーと制約を持つ同じテーブルを生成します。ですから、私はこれら2つの違いを実際には見ていません。また、どちらの例でも、片側に主キーがあります。
私が理解したように、真の双方向関係では、両方のテーブルにもう一方のテーブルを指す主キーが必要ですか?そして、そうではない教義のドキュメンテーションの与えられた例で。どちらの例でも同じ結果が得られ、同じです。
だから私がしたことは、これです、私がユーザーとカードエンティティを持っていて、関係を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を記述したことです。そして、Doctrineの例では1つしかありません。今、私は双方向の関係だと思うものを得るでしょう。EERダイアグラムを見ると、1つの線がユーザーからカードを指し、もう1つの線がカードからユーザーを指していることがわかります。
だから基本的に私はこれを正しく理解しましたか?Doctrineのドキュメントは間違っていますか?:D双方向のOneToOne関係はEER図でどのように見えますか?
ありがとう!