Tôi bắt đầu chơi đùa với thư viện Doctrine ORM và Im tìm hiểu về tất cả các mối liên hệ giữa các bảng.Học thuyết - OneToOne Một chiều so với OneToOne Hai chiều
Vì vậy, Im bị kẹt với sự khác biệt trong quan hệ hai hướng và hai chiều.
Khi tôi nhận được nó, quan hệ một chiều có khóa chính chỉ ở một bên, và bên đó đang sở hữu bên phải không? Và quan hệ hai chiều có khóa chính trong cả hai bảng và do đó bạn có thể có mối quan hệ từ cả hai bên và đặt ràng buộc ở cả hai bên.
Bây giờ, Im đọc qua tài liệu về học thuyết về quan hệ và bạn có: Unidirectional và Bidirectional liên kết.
Nhưng chúng tạo ra cùng một SQL và các bảng giống với cùng khóa và ràng buộc chính. Vì vậy, tôi không thực sự thấy bất kỳ sự khác biệt trong hai. Và cả hai ví dụ đều có khóa chính ở một bên.
Khi tôi nhận được nó, mối quan hệ hai chiều thực sự phải có khóa chính trong cả hai bảng trỏ đến bảng khác phải không? Và với ví dụ cụ thể về tài liệu Doctrine không phải như vậy. Cả hai ví dụ đều cho kết quả tương tự và giống nhau.
Vì vậy, những gì tôi đã làm, là điều này, cho phép nói rằng tôi có người dùng và thẻ thực thể, và muốn quan hệ là OneToOne hai chiều.
/**
* @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;
}
Sự khác biệt ở đây là tôi đã viết @JoinColumn trong cả hai đối tượng/thực thể. Và trong ví dụ Doctrine chỉ có một. Bây giờ tôi sẽ nhận được những gì tôi nghĩ là quan hệ hai chiều. Nếu tôi nhìn vào biểu đồ EER, tôi có thể thấy một dòng chỉ từ người dùng đến thẻ và một dòng khác từ thẻ này sang người dùng khác.
Vì vậy, về cơ bản tôi đã nhận được quyền này? Tài liệu Doctrine có sai không? : D Quan hệ OneToOne hai chiều trông như thế nào trong biểu đồ EER?
Cảm ơn!
Bất kỳ ai? Không một ai? : D – otporan