Laravel Strategy Product Tag Pivotable

Laravel Strategy Product Tag Pivotable

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]);