Ich habe angefangen, mit Doctrine ORM Bibliothek zu spielen, und ich lerne über alle Assoziationen zwischen Tabellen.Doktrin - OneToOne Unidirektional vs OneToOne Bidirektional
Also Im stecken mit den Unterschieden in Unidirektional und Bidirektionale Beziehung.
Wie ich es verstehe, Unidirektionale Beziehung hat Primärschlüssel nur auf einer Seite, und diese Seite besitzt Seite rechts? Und bidirektionale Beziehung haben Primärschlüssel in beiden Tabellen und daher können Sie Beziehung von beiden Seiten haben, und Beschränkungen auf beiden Seiten festlegen.
Nun, ich lese Doctrine Dokumentation über Beziehungen und dort haben Sie: Unidirectional und Bidirectional Assoziationen.
Aber sie produzieren die gleiche SQL, und die gleichen Tabellen mit den gleichen Primärschlüssel-s und Einschränkungen. Also sehe ich keinen Unterschied in diesen beiden. Und beide Beispiele haben Primärschlüssel auf einer Seite.
Wie ich es bekomme die wahre bidirektionale Beziehung sollte Primärschlüssel in beiden Tabellen auf den anderen Tisch zeigen, richtig? Und mit gegebenem Beispiel in Doctrine-Dokumentation ist das nicht der Fall. Beide Beispiele geben das gleiche Ergebnis und sind gleich.
Also was ich getan habe, ist dies, sagen wir, ich habe Benutzer und Kartenentität, und wollen Beziehung zu OneToOne Bidirektional sein.
/**
* @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;
}
Der Unterschied hier ist, schrieb ich @JoinColumn in beide Objekte/Entitäten. Und in Doctrine Beispiel gibt es nur einen. Jetzt würde ich bekommen, was ich denke, ist bidirektionale Beziehung. Wenn ich mir das EER-Diagramm anschaue, sehe ich eine Zeile, die von Benutzer zu Karte zeigt, und die andere von Karte zu Benutzer.
So grundlegend habe ich das richtig verstanden? Ist die Doctrine-Dokumentation falsch? : D Wie würde die Bidirektionale OneToOne-Beziehung im EER-Diagramm aussehen?
Danke!
Jeder? Niemand? : D – otporan