Oznámení
Jak přiřadit entitu k entitě s vazbou 1:1?
před 5 lety

- medhi
 - Bronze Partner | 189
 
Ahoj,
nikde jsem nenašel, jak se přiřazuje entita k entitě se vzájemnou vazbou 1:1. Všechny mé pokusy selhaly. Díky
před 5 lety

- Tharos
 - Člen | 1042
 
/**
 * @property BookDetail $detail m:hasOne
 */
class Book ...
/**
 * @property Book $book m:belongsToOne
 */
class BookDetail ...
$book->detail = $bookDetail;
Takhle to nejde? :)
před 5 lety

- medhi
 - Bronze Partner | 189
 
Jde, ale trvalo mi hodně dlouho, než mi to došlo. Nejdřív jsem si myslel, že pokud mám vazbu 1:1, mají být obě vazby popsány m:belongsToOne.
Možná jsou tyhle věci nějak samozřejmé, ale toto je můj první ORM a nedošlo mi to. Nešlo by do dokumentace připsat, co jednotlivé definice vlastně přesně vyjadřují? Předpokládám, že i vazeb 1:1 může být více typů (obě tabulky mají cizi_id nebo jenom jedna).
před 5 lety

- castamir
 - Člen | 631
 
Vazby jsou 4 viz dokumentace. Kterou použít, tak na to Tharos doporučuje doslova říct si ty entity a vazby:
- Book has one Author (FK je v Book)
 - Product belongs to Product detail (FK je v Product detail)
 - Book has many Tags (vazební tabulka book_tag)
 - Author belongs to many Books (FK je v Book)
 
Editoval castamir (1. 8. 2014 8:48)
před 5 lety

- Tharos
 - Člen | 1042
 
Castamir to popsal úplně přesně. Pokud bys chtěl ještě nějaké ukázky, tak vazby v tomto modelu by vypadaly zhruba následovně:
/**
 * @property Book[] $books m:belongsToMany
 */
class Author extends Entity
{
}
/**
 * @property Author $author m:hasOne
 * @property Borrowing[] $borrowings m:belongsToMany
 */
class Book extends Entity
{
}
/**
 * @property Book[] $books m:hasMany
 */
class Tag extends Entity
{
}
/**
 * @property Book $book m:hasOne
 * @property Borrower $borrower m:hasOne
 */
class Borrowing extends Entity
{
}
/**
 * @property Borrowing $borrowing m:belongsToMany
 */
class Borrower extends Entity
{
}
No a pokud bychom si zavedli umělé omezení, že zákazník knihovny
(Borrower) může mít v konkrétní okamžik půjčenou pouze
jednu výpůjčku, stačilo přidat unikátní index nad sloupec
borrowing.borrower_id a pak by entita Borrower mohla
vypadat následovně:
/**
 * @property Borrowing $borrowing m:belongsToOne
 */
class Borrower extends Entity
{
}
Entita Borrowing by zůstala nezměněná.
Tohle v podstatě zahrnuje všechny varianty. :)
Editoval Tharos (1. 8. 2014 23:06)