Comencé a jugar con Doctrine ORM library, y estoy aprendiendo sobre todas las asociaciones entre tablas.Doctrine - OneToOne Unidireccional vs OneToOne Bidireccional
Así que estoy atascado con las diferencias en relación bidireccional y bidireccional.
Según lo entiendo, la relación unidireccional tiene la tecla principal solo en un lado, y ese lado es el que posee el lado derecho? Y la relación bidireccional tiene una clave principal en ambas tablas y, por lo tanto, puede tener una relación desde ambos lados y establecer restricciones en ambos lados.
Ahora, estoy leyendo a través de la documentación de Doctrine sobre las relaciones y allí tienes: Unidirectional y Bidirectional asociaciones.
Pero producen el mismo SQL y las mismas tablas con las mismas claves primarias y restricciones. Así que realmente no veo ninguna diferencia en esos dos. Y ambos ejemplos tienen clave principal en un lado.
Según lo entiendo, la verdadera relación bidireccional debe tener claves primarias en ambas tablas apuntando a la otra tabla ¿verdad? Y con un ejemplo dado en la documentación de Doctrine, ese no es el caso. Ambos ejemplos dan el mismo resultado y son iguales.
Así que lo que hice, es esto, digamos que tengo Entidad de Usuario y Tarjeta, y quiero que la relación sea OneToOne Bidireccional.
/**
* @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;
}
La diferencia aquí es que escribí @JoinColumn en ambos objetos/entidades. Y en el ejemplo de Doctrine solo hay uno. Ahora obtendría lo que creo que es relación bidireccional. Si miro el diagrama EER, puedo ver una línea que apunta de usuario a tarjeta, y la otra de tarjeta a usuario.
Así que, básicamente, lo hice bien? ¿La documentación de Doctrine está equivocada? : D ¿Cómo se vería la relación OneToOne bidireccional en el diagrama EER?
Gracias!
¿Alguien? ¿Ninguno? :RE – otporan