This post is also available in:
English
Hallo apa kabar teman teman semua, semoga sehat dan sukses selalu.
Kali ini kita akan membahas Eloquent antar relasi tabel. Fitur ini akan mempermudah kamu untuk membuat relasi lebih ringkas dan simpel. Jika kita menggunakan perntah SQL ini akan membuat relasi antar tabel menjadi lebih panjang. Mari kita bahas Relationship pada Eloquent.
Sebelum saya lanjutkan mungkin ada beberapa tutorial yang teman teman minati.
Tutorial Lengkap Menggunakan Soft Delete di Laravel
Cara Menggunakan Seeder di Laravel
Laravel Database Relationship
- Relasi one to one dimana sebuah data pada sebuah tabel hanya memiliki relasi ke sebuah data pada tabel yang lain. Misalnya, sebuah data tabel tb_User memiliki relasi 1 nomor telepon di tabel tb_Contact.
- Relasi one to many dimana sebuah data pada sebuah tabel memiliki relasi ke beberapa data pada tabel yang lain. Misalnya, sebuah data tabel tb_Category memiliki relasi banyak data barang di tb_Inventory. Atau dengan kata lain, 1 kategori memiliki banyak data inventory.
- Relasi many to one (One to many Inverse) dimana merupakan kebalikan dari relasi one to many. Misalnya kita ingin mengetahui data barang di tb_Inventory memiliki kategori apa, maka relasi ini yang akan digunakan.
- Relasi many to many dimana banyak data pada sebuah tabel memiliki relasi ke banyak data juga pada tabel yang lainnya. Relasi tersebut terbentuk melalui sebuah tabel bantu. Misalnya, banyak data pada tabel tb_Siswa memiliki relasi peminjaman ke banyak data pada tabel tb_Buku. Relasi tersebut terbentuk dengan tabel bantu bernama tb_Transaksi.
One-To-One Eloquent relationship
Merupakan relasi paling dasar. Misalnya: Setiap User memiliki 1 Phone. Argumen pertama yang diteruskan ke metode hasOne adalah nama model terkait.
public function profile():
{
return $this->hasOne(Profile::class);
}
Fungsi hasOne sekarang mengharapkan kolom user_id pada model Profil. Jika nama kolom Anda berbeda, tambahkan argumen kedua ke hubungan hasOne dengan nama kolom lainnya:
return $this->hasOne(Profile::class, 'foreign_key');
- Foreign Key
- Eloquent menentukan foreign key berdasarkan nama model. Dalam hal ini, model Profile diasumsikan memiliki foreign_key default author_id.
- Menetapkan Foreign Key dimana default dari relationship User dan author adalah user_id. Untuk menetapkan Foreign Key secara manual, dapat dituliskan sebagai parameter kedua.
return $this->hasOne(Profile::class, 'foreign_key','local_key');
- Inverse Relationships Foreign Key.
Pada contoh sebelumnya, Eloquent mencoba mencocokkan user_id dari model Phone ke id dari model User. Default foreign key name adalah nama method dari relationship ditambah akhiran _id, sehingga pada contoh adalah user_id.
Apabila tidak sesuai, dapat dituliskan pada argumen kedua belongsTo:
public function profile():
{
return $this->belongsTo(Profile::class);
}
- Inverse Relationships Primary Key
Apabila diiginkan relasi tidak menggunakan default primary key, dapat dituliskan di parameter ketiga belongsTo:
return $this->belongsTo(Profile::class, 'foreign_key','local_key');
Eloquent One-To-Many relationship
Hal lain yang sangat penting, bahkan mungkin yang paling penting, adalah hubungan Satu-Ke-Banyak. Juga dikenal sebagai hasMany-relationship, hubungan ini mendefinisikan relasi bahwa ‘satu item memiliki banyak item lainnya. Hubungan ini sangat mirip dengan yang di atas.
Untuk melanjutkan contoh blogging kami, katakan bahwa profil memiliki banyak posting. Buka model Profil Anda dan tambahkan metode berikut:
public function posts(): HasMany
{
return $this->hasMany(Post::class);
//Or: return $this->hasMany(Post::class, 'foreign_key');
}
- Foreign dan Local Key
Penggunaan foreign dan primary (local) key pada One to Many juga serupa pada One to One.
return $this->hasMany(Post::class, 'foreign_key');
return $this->hasMany(Post::class, 'foreign_key','local_key');
Many to Many
- Relasi ini juga banyak dipergunakan. Penggunaannya sedikit lebih kompleks dibanding 2 tipe relasi sebelumnya.
- Contoh berikut adalah di mana terdapat users, roles, dan role_user. Seorang user dapat memiliki banyak role dan sebuah role dapat dimiliki banyak user.
- role_user merupakan default table perantara (intermediate) atau pivot. Nama table adalah dari kedua table role dan user sesuai urutan abjad
- Relasi didefinisikan dengan menggunakan method belongsToMany.
public function profiles(): BelongsToMany
{
return $this->belongsToMany(Profile::class);
}
- Pivot Table
Seperti disebutkan sebelumnya nama tabel pivot dihasilkan dari kedua nama tabel dan diurutkan abjad. Apabila dibutuhkan dapat didefinisikan pada parameter kedua dari method belongsToMany.
return $this->belongsToMany(Profile::class,'role_user');
Selain mendefinisikan nama tabel pivot, seperti pada jenis relasi lainnya, key dari masing-masing table dapat didefinisikan seperti contoh berikut:
return $this->belongsToMany(Profile::class,'role_user','user_id','role_id');
Apabila terdapat field/column lain pada pivot table, dan didefinisikas dengan menuliskan pada method withPivot.
return $this->belongsToMany(Profile::class)->withPivot('column1','column2');
Demkian tutorial kali ini yang bisa saya sampaikan, semoga bermanfaat.
Terimakasih…….