Relasi Eloquent
Definisikan relasi hasOne, hasMany, belongsTo, dan banyak-ke-banyak.
Relasi Eloquent adalah pelajaran PHP Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar PHP Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus PHP Academy mencakup 4 pelajaran total.
Mengapa Relasi?
Relasi Eloquent memungkinkan Anda mengkueri model terkait menggunakan PHP yang ekspresif, bukan penggabungan SQL mentah.
hasOne
Satu User memiliki satu Profile. Definisikan relasi ini pada model pemilik.
<?php
class User extends Model {
public function profile(): \Illuminate\Database\Eloquent\Relations\HasOne {
return $this->hasOne(Profile::class);
}
}
// Access:
$profile = $user->profile;belongsTo
Satu Profile dimiliki oleh satu User. Definisikan relasi ini pada model yang menyimpan kunci asing.
<?php
class Profile extends Model {
public function user(): \Illuminate\Database\Eloquent\Relations\BelongsTo {
return $this->belongsTo(User::class);
}
}
// Access:
$user = $profile->user;hasMany
Satu User memiliki banyak Post. Relasi satu-ke-banyak dari sisi induk.
<?php
class User extends Model {
public function posts(): \Illuminate\Database\Eloquent\Relations\HasMany {
return $this->hasMany(Post::class);
}
}
// Access:
$posts = $user->posts; // CollectionbelongsTo (sisi banyak)
Setiap Post dimiliki oleh satu User.
<?php
class Post extends Model {
public function author(): \Illuminate\Database\Eloquent\Relations\BelongsTo {
return $this->belongsTo(User::class, "user_id");
}
}Banyak-ke-Banyak (belongsToMany)
Satu Post memiliki banyak Tag, dan satu Tag memiliki banyak Post — keduanya dihubungkan melalui tabel perantara.
<?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
Akses model yang terkait secara tidak langsung: satu Country memiliki banyak Post melalui User.
<?php
class Country extends Model {
public function posts() {
return $this->hasManyThrough(Post::class, User::class);
}
}Relasi Polimorfik
Model Comment dapat dimiliki oleh Post atau Video menggunakan relasi polimorfik.
<?php
class Comment extends Model {
public function commentable() {
return $this->morphTo();
}
}
class Post extends Model {
public function comments() {
return $this->morphMany(Comment::class, "commentable");
}
}Kueri Keberadaan Relasi
Kueri model berdasarkan keberadaan suatu relasi.
<?php
// Posts that have at least one comment:
$commented = Post::has("comments")->get();
// Posts with >= 3 comments:
$popular = Post::has("comments", ">=", 3)->get();whereHas
Saring berdasarkan kondisi relasi.
<?php
$phpPosts = Post::whereHas("tags", function ($q) {
$q->where("name", "PHP");
})->get();Metode Relasi vs Properti Dinamis
$user->posts() mengembalikan pembangun kueri yang dapat dirangkai. $user->posts mengembalikan Koleksi yang telah dimuat.
Ringkasan
Tentukan relasi sebagai metode yang mengembalikan hasOne, hasMany, belongsTo, atau belongsToMany. Akses relasi tersebut sebagai properti dinamis atau rangkai kueri dari pemanggilan metode.
Pemeriksaan Singkat
Jenis relasi mana yang menggunakan tabel perantara?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Relasi Eloquent” gratis?
Ya — teks lengkap “Relasi Eloquent” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus PHP Academy, upgrade ke CoddyKit PRO. Kursus PHP Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Relasi Eloquent”?
Definisikan relasi hasOne, hasMany, belongsTo, dan banyak-ke-banyak. Kamu berlatih PHP Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai PHP Academy?
Tidak diperlukan pengalaman sebelumnya. PHP Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Relasi Eloquent” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran PHP Academy ini?
Ya. Setiap pelajaran PHP Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.