Cara menggunakan hasOne dan hasMany di Eloquent Laravel beserta contoh
Perbedaan hasOne dan hasMany
hasOne: Digunakan untuk mendefinisikan hubungan one-to-one antara dua model. Misalnya, seorang pengguna hanya memiliki satu profil.hasMany: Digunakan untuk mendefinisikan hubungan one-to-many antara dua model. Misalnya, seorang penulis dapat memiliki banyak artikel.
Contoh Penggunaan
1. hasOne
Misalkan Anda memiliki model User dan Profile. Setiap user memiliki satu profile. Berikut adalah cara mendefinisikan relationship hasOne di model User:
<?php
namespace App\Models;
useIlluminate\Database\Eloquent\Factories\HasFactory;
useIlluminate\Database\Eloquent\Model;
classUserextendsModel{
useHasFactory;
publicfunctionprofile()
{
return$this->hasOne(Profile::class);
}
}
Dan di model Profile:
<?phpnamespaceApp\Models;
useIlluminate\Database\Eloquent\Factories\HasFactory;
useIlluminate\Database\Eloquent\Model;
classProfileextendsModel{
useHasFactory;
publicfunctionuser()
{
return$this->belongsTo(User::class);
}
}
Setelah mendefinisikan relationship, Anda dapat mengakses data profile user dengan mudah:
$user = User::find(1);
$profile = $user->profile;
echo $profile->bio; // Output: Bio user
2. hasMany
Misalkan Anda memiliki model Author dan Post. Setiap author dapat memiliki banyak post. Berikut adalah cara mendefinisikan relationship hasMany di model Author:
<?php
namespace App\Models;
useIlluminate\Database\Eloquent\Factories\HasFactory;
useIlluminate\Database\Eloquent\Model;
classAuthorextendsModel{
useHasFactory;publicfunctionposts()
{
return$this->hasMany(Post::class);
}
}
Dan di model Post:
<?phpnamespaceApp\Models;
useIlluminate\Database\Eloquent\Factories\HasFactory;
useIlluminate\Database\Eloquent\Model;classPostextendsModel{
useHasFactory;
publicfunctionauthor()
{
return$this->belongsTo(Author::class);
}
}
Setelah mendefinisikan relationship, Anda dapat mengakses data post author dengan mudah:
$author = Author::find(1);
$posts = $author->posts;
foreach ($posts as $post) {
echo $post->title . "<br>";
}
Kesimpulan
Dengan menggunakan hasOne dan hasMany, Anda dapat dengan mudah berinteraksi dengan data yang memiliki hubungan satu sama lain di Eloquent Laravel. Ini membuat kode Anda lebih terstruktur dan mudah dibaca.
Catatan
- Pastikan nama tabel dan nama kolom sesuai dengan konvensi Laravel.
- Anda dapat menambahkan argumen tambahan di method
hasOnedanhasManyuntuk menyesuaikan relationship, seperti foreign key dan local key.
Semoga penjelasan ini bermanfaat! Jika Anda memiliki pertanyaan lebih lanjut, jangan ragu untuk bertanya.