PHP Academy · Lektion

Eloquent-relationer

Definér hasOne-, hasMany-, belongsTo- og mange-til-mange-relationer.

Lektion 3 af 413 trin

Eloquent-relationer er en gratis PHP Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i PHP Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. PHP Academy-kurset indeholder 4 lektioner i alt.

Hvorfor relationer?

Eloquent-relationer lader dig forespørge relaterede modeller med udtryksfuld PHP i stedet for rå SQL JOINs.

hasOne

En User har én Profile. Definér relationen i den ejende model.

<?php
class User extends Model {
    public function profile(): \Illuminate\Database\Eloquent\Relations\HasOne {
        return $this->hasOne(Profile::class);
    }
}
// Access:
$profile = $user->profile;

belongsTo

En Profile tilhører en User. Definér relationen i den model, der indeholder fremmednøglen.

<?php
class Profile extends Model {
    public function user(): \Illuminate\Database\Eloquent\Relations\BelongsTo {
        return $this->belongsTo(User::class);
    }
}
// Access:
$user = $profile->user;

hasMany

En User har mange Posts. En-til-mange fra forældresiden.

<?php
class User extends Model {
    public function posts(): \Illuminate\Database\Eloquent\Relations\HasMany {
        return $this->hasMany(Post::class);
    }
}
// Access:
$posts = $user->posts; // Collection

belongsTo (mange-siden)

Hver Post tilhører en User.

<?php
class Post extends Model {
    public function author(): \Illuminate\Database\Eloquent\Relations\BelongsTo {
        return $this->belongsTo(User::class, "user_id");
    }
}

Mange-til-mange (belongsToMany)

Et Post har mange Tags, og et Tag tilhører mange Posts — forbundet via en pivottabel.

<?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

Få adgang til indirekte relaterede modeller: Et Country har mange Posts gennem Users.

<?php
class Country extends Model {
    public function posts() {
        return $this->hasManyThrough(Post::class, User::class);
    }
}

Polymorfe relationer

En Comment-model, der kan tilhøre enten et Post eller en Video ved hjælp af polymorfe relationer.

<?php
class Comment extends Model {
    public function commentable() {
        return $this->morphTo();
    }
}
class Post extends Model {
    public function comments() {
        return $this->morphMany(Comment::class, "commentable");
    }
}

Forespørgsler efter relationers eksistens

Forespørg modeller ud fra, om en relation eksisterer.

<?php
// Posts that have at least one comment:
$commented = Post::has("comments")->get();
// Posts with >= 3 comments:
$popular = Post::has("comments", ">=", 3)->get();

whereHas

Filtrér ud fra betingelser for relationer.

<?php
$phpPosts = Post::whereHas("tags", function ($q) {
    $q->where("name", "PHP");
})->get();

Relationsmetoder kontra dynamiske egenskaber

$user->posts() returnerer forespørgselsbyggeren, som du kan kæde videre på. $user->posts returnerer den indlæste Collection.

Opsummering

Definér relationer som metoder, der returnerer hasOne, hasMany, belongsTo eller belongsToMany. Få adgang til dem som dynamiske egenskaber, eller kæd forespørgsler sammen fra metodekaldet.

Hurtigt tjek

Hvilken relationstype bruger en pivottabel?

Gratis at komme i gang

Lær PHP med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
49
Lektioner
195

Ofte stillede spørgsmål

Er lektionen “Eloquent-relationer” gratis?

Ja — hele teksten til “Eloquent-relationer” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af PHP Academy-kurset, skal du opgradere til CoddyKit PRO. PHP Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Eloquent-relationer”?

Definér hasOne-, hasMany-, belongsTo- og mange-til-mange-relationer. Du øver dig i PHP Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på PHP Academy?

Der kræves ingen tidligere erfaring. PHP Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Eloquent-relationer”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne PHP Academy-lektion?

Ja. Alle PHP Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Eloquent-modeller og migrationer
  2. CRUD med Eloquent
  3. Eloquent-relationer
  4. Eager loading og query scopes
← Tilbage til PHP Academy