Cara menggunakan hasOne dan hasMany di Eloquent Laravel beserta contoh

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 hasOne dan hasMany untuk menyesuaikan relationship, seperti foreign key dan local key.

Semoga penjelasan ini bermanfaat! Jika Anda memiliki pertanyaan lebih lanjut, jangan ragu untuk bertanya.