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)