Setelah berhasil membuat Model dan Migration, maka kita akan lanjutkan belajar menambahkan relasi atau relationship di dalam Model. Ini bertujuan untuk menghubungkan antar table yang saling berkaitan.
Pada bab Perancangan teman-teman telah melihat ada 14 relasi yang akan kita buat di dalam studi kasus ini dan pada materi ini, kita semua akan belajar bagaimana cara mengimplementasikannya di dalam Laravel menggunakan fitur Eloquent Relationships.
Langkah 1 - One to Many: Categories ke Products (Satu ke Banyak)
Sekarang kita akan membuat relasi One to Many dari table categories ke table products. Yang artinya 1 data category nantinya bisa memiliki banyak data product.
Silahkan buka file app/Models/Category.php, kemudian ubah kode-nya menjadi seperti berikut ini.
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
/**
* fillable
*
* @var array
*/
protected $fillable = ['image', 'name', 'slug'];
/**
* products
*
* @return void
*/
public function products()
{
return $this->hasMany(Product::class);
}
}
Dari perubahan kode di atas, kita menambahkan method baru dengan nama products dan di dalamnya kita membuat relasi hasMany ke dalam Model Product.
Langkah 2 - Belongs To: Products ke Categories (Dimiliki Oleh)
Sekarang, kita akan membuat relasi Belongs To dari table products ke table categories. Tujuaanya agar kita juga bisa memanggil data induknya (category) dari data product.
Silahkan teman-teman buka file app/Models/product.php, kemudian ubah kode-nya menjadi seperti berikut ini.
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
/**
* fillable
*
* @var array
*/
protected $fillable = [
'category_id',
'image',
'title',
'slug',
'description',
'price',
'weight'
];
/**
* category
*
* @return void
*/
public function category()
{
return $this->belongsTo(Category::class);
}
}
Dari perubahan kode di atas, kita menambahkan method baru dengan nama category dan di dalamnya kita membuat relasi belongsTo ke dalam Model Category.
Langkah 3 - One to Many: Transactions ke TransactionDetails (Satu ke Banyak)
Sama seperti sebelumnya, yaitu kita akan membuat relasi satu ke banyak atau One to Many. Dimana dalam 1 transaksi akan bisa memiliki banyak data di transaksi detail.
Silahkan buka file app/Models/Transaction.php, kemudian ubah kode-nya menjadi seperti berikut ini.
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Transaction extends Model
{
/**
* fillable
*
* @var array
*/
protected $fillable = [
'customer_id',
'shipping_id',
'province_id',
'city_id',
'invoice',
'weight',
'address',
'total',
'status',
'snap_token',
];
/**
* TransactionDetails
*
* @return void
*/
public function TransactionDetails()
{
return $this->hasMany(TransactionDetail::class);
}
}
Dari perubahan kode di atas, kita menambahkan method baru dengan nama TransactionDetails dan di dalamnya kita membuat relasi hasMany ke dalam Model TransactionDetail.
Langkah 4 - Has One: Transactions ke Shippings (Satu ke Satu)
Kita lanjutkan membuat relasi Has One dari table transactions ke table shippings. Artinya satu data pada tabel utama (transactions) hanya memiliki satu data terkait pada tabel lainnya (shippings).
Silahkan teman-teman buka file app/Models/Transaction.php, kemudian ubah kode-nya menjadi seperti berikut ini.
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Transaction extends Model
{
/**
* fillable
*
* @var array
*/
protected $fillable = [
'customer_id',
'shipping_id',
'province_id',
'city_id',
'invoice',
'weight',
'address',
'total',
'status',
'snap_token',
];
/**
* TransactionDetails
*
* @return void
*/
public function TransactionDetails()
{
return $this->hasMany(TransactionDetail::class);
}
/**
* shipping
*
* @return void
*/
public function shipping()
{
return $this->hasOne(Shipping::class);
}
}
Di atas kita menambahkan method baru dengan nama shipping dan di dalamnya kita melakukan relasi hasOne ke dalam Model Shipping.
Langkah 5 - One to Many: Products ke Ratings (Satu ke Banyak)
Disini kita akan membuat relasi On to Many dari table products ke table ratings. Artinya di dalam 1 product bisa memiliki banyak rating / ulasan.
Silahkan teman-teman buka file app/Models/Product.php, kemudian ubah semua kode-nya menjadi seperti berikut ini.
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
/**
* fillable
*
* @var array
*/
protected $fillable = [
'category_id',
'image',
'title',
'slug',
'description',
'price',
'weight'
];
/**
* category
*
* @return void
*/
public function category()
{
return $this->belongsTo(Category::class);
}
/**
* ratings
*
* @return void
*/
public function ratings()
{
return $this->hasMany(Rating::class);
}
}
Dari perubahan kode di atas, kita menambahkan method baru dengan nama ratings dan di dalamnya kita membuat relasi hasMany ke dalam Model Rating.
Langkah 6 - Belongs To: Transactions ke Customer (Dimiliki Oleh)
Selanjutnya adalah membuat relasi Belongs To antara table transactions dengan customers. Artinya ada sebuah data transaction yang dimiliki oleh seorang customer.
Silahkan buka file app/Models/Transaction.php, kemudian ubah kode-nya menjadi seperti berikut ini.
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Transaction extends Model
{
/**
* fillable
*
* @var array
*/
protected $fillable = [
'customer_id',
'shipping_id',
'province_id',
'city_id',
'invoice',
'weight',
'address',
'total',
'status',
'snap_token',
];
/**
* TransactionDetails
*
* @return void
*/
public function TransactionDetails()
{
return $this->hasMany(TransactionDetail::class);
}
/**
* shipping
*
* @return void
*/
public function shipping()
{
return $this->hasOne(Shipping::class);
}
/**
* customer
*
* @return void
*/
public function customer()
{
return $this->belongsTo(Customer::class);
}
}
Dari perubahan kode di atas, kita menambahkan method baru dengan nama customer dan di dalamnya kita membuat relasi belongsTo ke dalam Model Customer.
Langkah 7 - Belongs To: Transactions ke Provinces (Dimiliki Oleh)
Berikutnya, kita akan membuat relasi Belongs To antara table transactions dengan provinces. Contohnya Transaksi dengan ID #12345 ditujukan ke provinsi "Jawa Barat" .
Silahkan buka file app/Models/Transaction.php, kemudian ubah kode-nya menjadi seperti berikut ini.
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Transaction extends Model
{
/**
* fillable
*
* @var array
*/
protected $fillable = [
'customer_id',
'shipping_id',
'province_id',
'city_id',
'invoice',
'weight',
'address',
'total',
'status',
'snap_token',
];
/**
* TransactionDetails
*
* @return void
*/
public function TransactionDetails()
{
return $this->hasMany(TransactionDetail::class);
}
/**
* shipping
*
* @return void
*/
public function shipping()
{
return $this->hasOne(Shipping::class);
}
/**
* customer
*
* @return void
*/
public function customer()
{
return $this->belongsTo(Customer::class);
}
/**
* province
*
* @return void
*/
public function province()
{
return $this->belongsTo(Province::class);
}
}
Dari perubahan kode di atas, kita menambahkan method baru dengan nama province dan di dalamnya kita membuat relasi belongsTo ke dalam Model Province.
Langkah 8 - Belongs To: Transactions ke Cities (Dimiliki Oleh)
Sama seperti di atas, disini kita akan membuat relasi Belongs To untuk transactions dengan cities. Contohnya Transaksi dengan ID #12345 ditujukan ke kota "Bandung".
Silahkan teman-teman buka file app/Models/Transaction.php, kemudian ubah kode-nya menjadi seperti berikut ini.
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Transaction extends Model
{
/**
* fillable
*
* @var array
*/
protected $fillable = [
'customer_id',
'shipping_id',
'province_id',
'city_id',
'invoice',
'weight',
'address',
'total',
'status',
'snap_token',
];
/**
* TransactionDetails
*
* @return void
*/
public function TransactionDetails()
{
return $this->hasMany(TransactionDetail::class);
}
/**
* shipping
*
* @return void
*/
public function shipping()
{
return $this->hasOne(Shipping::class);
}
/**
* customer
*
* @return void
*/
public function customer()
{
return $this->belongsTo(Customer::class);
}
/**
* province
*
* @return void
*/
public function province()
{
return $this->belongsTo(Province::class);
}
/**
* city
*
* @return void
*/
public function city()
{
return $this->belongsTo(City::class);
}
}
Dari perubahan kode di atas, kita menambahkan method baru dengan nama city dan di dalamnya kita membuat relasi belongsTo ke dalam Model City.
Langkah 9 - On to Many: Provinces ke Cities (Satu ke Banyak)
Dan kali ini kita akan membuat relasi One to Many, yaitu dimana di dalam 1 province bisa memiliki banyak kota / kabupaten di dalamnya.
Silahkan buka file app/Models/Province.php, kemudian ubah kode-nya menjadi seperti berikut ini.
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Province extends Model
{
/**
* fillable
*
* @var array
*/
protected $fillable = [
'name'
];
/**
* cities
*
* @return void
*/
public function cities()
{
return $this->hasMany(City::class);
}
}
Dari perubahan kode di atas, kita menambahkan method baru dengan nama cities dan di dalamnya kita membuat relasi hasMany ke dalam Model City.
Langkah 10 - Belongs To: Cities ke Provinces (Dimiliki Oleh)
Sekarang kita akan membuat kebalikannya, yaitu dimana data pada tabel (cities) dimiliki oleh data di tabel induknya (provinces). Contoh Kota "Bandung" berada dalam provinsi "Jawa Barat".
Silahkan teman-teman buka file app/Models/City.php, kemudian ubah kode-nya menjadi seperti berikut ini.
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class City extends Model
{
/**
* fillable
*
* @var array
*/
protected $fillable = [
'name', 'province_id'
];
/**
* province
*
* @return void
*/
public function province()
{
return $this->belongsTo(Province::class);
}
}
Dari perubahan kode di atas, kita menambahkan method baru dengan nama province dan di dalamnya kita membuat relasi belongsTo ke dalam Model Province.
Langkah 11 - Belongs To: Carts ke Products (Dimiliki Oleh)
Selanjnutnya, kita akan membuat relasi Belongs To antara tabel carts dan products. Contohnya, Item "Laptop Gaming" yang ada di keranjang (cart) terhubung ke produk "Laptop Gaming" di tabel produk (products).
Silahkan buka file app/Models/Cart.php, kemudian ubah kode-nya menjadi seperti berikut ini.
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Cart extends Model
{
/**
* fillable
*
* @var array
*/
protected $fillable = [
'customer_id', 'product_id', 'qty'
];
/**
* product
*
* @return void
*/
public function product()
{
return $this->belongsTo(Product::class);
}
}
Dari perubahan kode di atas, kita menambahkan method baru dengan nama product dan di dalamnya kita membuat relasi belongsTo ke dalam Model Product.
Langkah 12 - Belongs To: Carts ke Customers (Dimiliki Oleh)
Berikutnya, kita akan membuat relasi Belongs To antara tabel carts dan customers. Contohnya, Item "Laptop Gaming" yang ada di keranjang (cart) dimili oleh customer yang bernama "Lutfi" di tabel customers.
Silahkan buka file app/Models/Cart.php, kemudian ubah kode-nya menjadi seperti berikut ini.
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Cart extends Model
{
/**
* fillable
*
* @var array
*/
protected $fillable = [
'customer_id', 'product_id', 'qty'
];
/**
* product
*
* @return void
*/
public function product()
{
return $this->belongsTo(Product::class);
}
/**
* customer
*
* @return void
*/
public function customer()
{
return $this->belongsTo(Customer::class);
}
}
Dari perubahan kode di atas, kita menambahkan method baru dengan nama customer dan di dalamnya kita membuat relasi belongsTo ke dalam Model Customer.
Langkah 13 - Belongs To: TransactionDetails ke Products (Dimiliki Oleh)
Selanjutnya, kita akan membuat relasi Belongs To antara tabel transaction_details dan products. Contohnya, Item "Laptop Gaming" yang ada di transaction detail terhubung ke produk "Laptop Gaming" di tabel produk (products).
Silahkan buka file app/Models/TransactionDetails.php, kemudian ubah kode-nya menjadi seperti berikut ini.
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class TransactionDetail extends Model
{
/**
* fillable
*
* @var array
*/
protected $fillable = [
'transaction_id',
'product_id',
'qty',
'price',
];
/**
* product
*
* @return void
*/
public function product()
{
return $this->belongsTo(Product::class);
}
}
Dari perubahan kode di atas, kita menambahkan method baru dengan nama product dan di dalamnya kita membuat relasi belongsTo ke dalam Model Product.
Langkah 14 - Belongs To: Ratings ke Customers (Dimiliki Oleh)
Selanjutnya, kita akan membuat relasi Belongs To antara tabel ratings dan customers. Contohnya, Rating 5 dan ulasan "Enak Banget" di berikan oleh customer dengan nama "Lutfi" di tabel customers.
Silahkan buka file app/Models/Rating.php, kemudian ubah kode-nya menjadi seperti berikut ini.
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Rating extends Model
{
/**
* fillable
*
* @var array
*/
protected $fillable = [
'customer_id',
'product_id',
'transaction_detail_id',
'rating',
'review',
];
/**
* customer
*
* @return void
*/
public function customer()
{
return $this->belongsTo(Customer::class);
}
}
Dari perubahan kode di atas, kita menambahkan method baru dengan nama customer dan di dalamnya kita membuat relasi belongsTo ke dalam Model Customer.