Relacje Eloquent
Definiuj relacje hasOne, hasMany, belongsTo i relacje wiele-do-wielu
Relacje Eloquent to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.
Po co używać relacji?
Relacje Eloquent pozwalają wyszukiwać powiązane modele za pomocą przejrzystego kodu PHP zamiast surowych złączeń SQL JOIN.
hasOne
Użytkownik ma jeden profil. Relację należy zdefiniować w modelu nadrzędnym.
<?php
class User extends Model {
public function profile(): \Illuminate\Database\Eloquent\Relations\HasOne {
return $this->hasOne(Profile::class);
}
}
// Access:
$profile = $user->profile;belongsTo
Profil należy do użytkownika. Relację należy zdefiniować w modelu przechowującym klucz obcy.
<?php
class Profile extends Model {
public function user(): \Illuminate\Database\Eloquent\Relations\BelongsTo {
return $this->belongsTo(User::class);
}
}
// Access:
$user = $profile->user;hasMany
Użytkownik ma wiele wpisów. Jest to relacja jeden-do-wielu od strony modelu nadrzędnego.
<?php
class User extends Model {
public function posts(): \Illuminate\Database\Eloquent\Relations\HasMany {
return $this->hasMany(Post::class);
}
}
// Access:
$posts = $user->posts; // CollectionbelongsTo (strona „wiele”)
Każdy wpis należy do użytkownika.
<?php
class Post extends Model {
public function author(): \Illuminate\Database\Eloquent\Relations\BelongsTo {
return $this->belongsTo(User::class, "user_id");
}
}Wiele-do-wielu (belongsToMany)
Wpis ma wiele tagów, a tag należy do wielu wpisów — są one połączone za pomocą tabeli pośredniej.
<?php
class Post extends Model {
public function tags() {
return $this->belongsToMany(Tag::class);
}
}
// Pivot table: post_tag (post_id, tag_id)
$tags = $post->tags;
$post->tags()->attach($tagId);
$post->tags()->detach($tagId);
$post->tags()->sync([1, 2, 3]);hasManyThrough
Uzyskaj dostęp do odległych modeli powiązanych: kraj ma wiele wpisów za pośrednictwem użytkowników.
<?php
class Country extends Model {
public function posts() {
return $this->hasManyThrough(Post::class, User::class);
}
}Relacje polimorficzne
Model Comment może należeć do wpisu lub filmu za pomocą relacji polimorficznych.
<?php
class Comment extends Model {
public function commentable() {
return $this->morphTo();
}
}
class Post extends Model {
public function comments() {
return $this->morphMany(Comment::class, "commentable");
}
}Zapytania sprawdzające istnienie relacji
Wyszukuj modele na podstawie istnienia relacji.
<?php
// Posts that have at least one comment:
$commented = Post::has("comments")->get();
// Posts with >= 3 comments:
$popular = Post::has("comments", ">=", 3)->get();whereHas
Filtruj na podstawie warunków relacji.
<?php
$phpPosts = Post::whereHas("tags", function ($q) {
$q->where("name", "PHP");
})->get();Metody relacji a właściwości dynamiczne
$user->posts() zwraca konstruktor zapytań, na którym można wywoływać kolejne metody. $user->posts zwraca załadowaną kolekcję.
Podsumowanie
Definiuj relacje jako metody zwracające hasOne, hasMany, belongsTo lub belongsToMany. Uzyskuj do nich dostęp jako do właściwości dynamicznych albo łącz zapytania, wywołując kolejne metody.
Szybkie sprawdzenie
Który typ relacji korzysta z tabeli pośredniej?
Często zadawane pytania
Czy lekcja „Relacje Eloquent” jest bezpłatna?
Tak — pełny tekst „Relacje Eloquent” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Relacje Eloquent”?
Definiuj relacje hasOne, hasMany, belongsTo i relacje wiele-do-wielu Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć PHP Academy?
Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Relacje Eloquent”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?
Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.