Untuk Membuat Pivot table di laravel sangat dimudahkan karna memang power Eloquent sendiri memang sangat Powerfull. dan sekarang saya akan membahas Untuk Relasi Data Pivot antara table product
dan tag
sekarang bisa ditambahkan table product_tag
agar kita lebih mudah dalam memanage Relasi Pivot Table:
php artisan make:migration create_product_tag_table
dan sekarang sudah ada file xxx_create_product_tag_table
dan sekarang tambahkan di schema file migration tersebut seperti ini :
...
Schema::create('product_tag', function (Blueprint $table) {
$table->id();
// kolom product_id akan direlasikan ke table product
$table->foreignId('product_id')->constrained('product');
// kolom tag_id akan direlasikan ke table product
$table->foreignId('tag_id')->constrained('tag');
$table->timestamps();
});
...
Sekarang buat model untuk table tersebut agar nanti bisa kita relasikan menggunakan Table itu:
php artisan make:model ProductTag
Edit file ProductTag
model menjadi seperti ini :
...
use Illuminate\Database\Eloquent\Relations\Pivot;
// Di Class ganti Model Menjadi Pivot
class ProductTag extends Pivot
{
use HasFactory;
// Relasi Ke Model Product
public function product(): BelongsTo
{
return $this->belongsTo(Product::class, 'product_id');
}
// Relasi Ke Model Tag
public function tag(): BelongsTo
{
return $this->belongsTo(Tag::class, 'tag_id');
}
}
...
Sekarang kita sudah berhasil membuat relasi dengan model baru yaitu ProductTag
dan sekarang kita ubah dan tambahkan relasi model Product
nya seperti ini :
public function tags(): BelongsToMany
{
return $this->belongsToMany(Tag::class, 'product_tag', 'product_id', 'tag_id')
->using(ProductTag::class);
}
Proses Merelasikan ketika membuat Product
Sekarang kita buat proses di controller ProductController
ini bisa juga dengan nama file yang anda buat sebelumnya di tahap proses yang diinginkan:
...
// Proses Create Product
$product = Product::create(...);
// Proses Relasi ke Tags yang tadi kita buat
$product->tags()->attach($request->input('tags'));
Query Relasi Laravel Pivot Table
Relasi Load di Laravel Untuk Menarik data load tags dalam product bisa berbagai cara, saya lebih menggunakan cara yang simple seperti ini :
...
// Cari produk berdasarkan parameter :id
$product = Product::find($id);
// Load data tags yang berhubungan dengan product
$product->load('tags');
return view('product.show', ['product' => $product]);