2013-06-01 9 views
10

Dobra, pracuję nad dokumentami Laravel 4, aby ustawić relację jeden do wielu między dwoma modelami. Oczywiście jedna strona powinna używać hasMany(). Ale z drugiej strony, czy powinienem użyć hasOne czy belongsTo? Czy to ma znaczenie? Jaka jest różnica? Dlaczego oba istnieją?Wyjaśnij, jak skonfigurować relację jeden do wielu w Eloquent ORM Laravel

Myślałem, że będzie dla relacji jeden-do-jednego i należy do jednej strony jeden-do-wielu. Ale w docs, do wkładania pokrewnego modelu tutaj:

http://laravel.com/docs/eloquent#inserting-related-models

są one za pomocą save() który wydaje się być obecne tylko w hasOne i hasMany relacji, a nie w belongsTo. Wygląda na to belongsTo wykorzystuje associate() do tego samego celu:

https://github.com/laravel/framework/blob/master/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php#L188

Może po prostu trzeba pewne ogólne tło na kiedy używać belongsTo Vs. hasOne i dlaczego belongsTo wykorzystuje associate() podczas hasOne wykorzystuje save().

EDIT: Chyba mój punkt zamieszania było to, że w docs (http://laravel.com/docs/eloquent#inserting-related-models), używali:

$post->comments()->save($comment); 

gdzie użyłem:

$comment->post()->associate($post); 

Czy istnieje przewaga jednego sposób czy inny? A może chodzi tylko o to, co ma sens w kontekście?

Odpowiedz

10

Proszę odnieść się do dokumentacji laravel na temat jednego do wielu relacji między wpisami i komentarzami http://laravel.com/docs/eloquent#relationships. (Gdzie jeden post ma wiele komentarzy, a komentarz należy do postu).

Tabele dla wpisów i komentarzy następująca

posta Tabela id | tytuł | body

Komentarze Tabela id | komentarz | post_id

Tabela bazy danych zawierająca klucz obcy należy do rekordu w drugiej tabeli, dlatego w modelu komentarzy należy określić, że komentarze należą do wpisów.

Masz rację, że relacja hasOne dotyczy tylko relacji jeden do jednego.

Oto blog na temat kodu laravel 3, w którym wyjaśniono, jak działają metody elokwentnych relacji.

http://laravel.io/topic/14/how-eloquent-relationship-methods-work

+0

To pomogło, bo miałem moje relacje zdefiniowane w tył. Miałem stół z kluczem zagranicznym jako "hasMany". –

Powiązane problemy