私はDoctrine ORMライブラリで遊び始めました。そしてImはテーブル間のすべての関連付けについて学習し始めました。Doctrine - OneToOne単方向対OneToOne双方向
私は単方向性と双方向性の違いで差し迫っています。
私がそれを得ると、一方向の関係は主キーのみを一方の側に持ち、その側は右側を所有していますか? 双方向リレーションは両方のテーブルにプライマリキーを持っているため、両側からリレーションを持ち両側に制約を設定できます。
ここでは、関係に関するドクトリンの文書を読み、そこにあなたは: UnidirectionalとBidirectionalの関連があります。
しかし、それらは同じSQLと、同じ主キーと制約を持つ同じテーブルを生成します。だから私は本当にそれらの2つの違いを見ていない。どちらの例も片方の主キーを持っています。
真の双方向関係では、両方のテーブルの主キーが別のテーブルを指している必要がありますか?そして、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を記述したことです。 Doctrineの例では1つしかありません。 今、私は双方向関係だと思っています。私がEERダイアグラムを見ると、ユーザーからカードを指し示す1行と、カードからユーザーに向かう1行を見ることができます。
基本的に私はこの権利を得ましたか? Doctrineのドキュメントは間違っていますか? :D 双方向OneToOne関係はEER図でどのように見えるでしょうか?
ありがとうございます!
誰でもいいですか?誰も? :D – otporan