Laravel banyak ke banyak hubungan: Panduan lengkap – Codewithaden

Dalam Laravel, hubungan yang fasih didefinisikan sebagai metode pada kelas model Anda yang fasih dan mereka adalah pembangun permintaan yang sangat kuat. Fasih membuat mengelola dan bekerja dengan hubungan ini mudah, dan membantu berbagai hubungan umum. Dalam tutorial ini, kita akan melihat bagaimana menggunakan banyak hubungan di Laravel dengan sebuah contoh.

Laravel banyak dari banyak

Laravel banyak ke banyak hubungan sedikit lebih rumit dari Punya satu dan memiliki banyak hubungan. Kunci dalam banyak hubungan adalah tabel gabungan (atau pivot). Tabel pivot memungkinkan ID hubungan dari satu model terkait dengan banyak model lain dan sebaliknya.

Banyak ke banyak Hubungan didefinisikan dengan menulis metode yang mengembalikan hasil dari milik.

Dalam contoh kami, kami akan mendefinisikan kedua model.

  1. Kategori
  2. Produk

Dalam contoh kami, Beberapa kategori memiliki Banyak produk , dan hubungan terbalik akan Banyak produk Milik Beberapa kategori

Jadi, yang bisa kita lakukan adalah bahwa, ketika kita pergi ke kategori tertentu, kita perlu menampilkan semua Produk

Sama, ketika kita melihat produk tertentu, kita perlu menampilkan semua Kategori itu milik produk tertentu.

Kami memulai contoh praktis ini dengan menginstal Laravel proyek.

Langkah 1: Pasang Laravel.

saya menggunakan Laravel Valet ke Buat proyek baru menggunakan perintah berikut.

laravel new relationships 

Jika Anda tidak menggunakan Laravel Valet, instal menggunakan perintah berikut.

composer create-project laravel/laravel relationship --prefer-dist 

Masuk ke proyek.

cd relationships 

Buka proyek di editor Anda.

code . 

Hal pertama, atur database.

Langkah 2: Buat model dan migrasi.

Kami mendefinisikan dua model untuk contoh kami.

  1. Kategori
  2. Produk
php artisan make:model Category -m
php artisan make:model Product -m 

Ini akan membuat produk dan kategori, tabel, dan model.

Sekarang, di dalam create_categories_table, Tentukan skema berikut.

// create_categories_table

/**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->timestamps();
        });
    } 

Juga, tulis skema berikut di dalam create_products_table.

// create_products_table

   /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->float('price');
            $table->timestamps();
        });
    } 

Sekarang, buka terminal dan buat tabel menggunakan perintah berikut.

php artisan migrate 

Langkah 3: Tentukan kategori acak secara manual.

Dalam contoh ini, kami hanya fokus pada caranya banyak untuk banyak hubungan Bekerja bagaimana kita dapat menetapkan nilai -nilai dan membuat hubungan dengan satu ke tabel lain. Jadi, kami membuat tiga kategori secara manual di dalam tabel database.

Laravel

Jadi, kami telah mendefinisikan tiga kategori secara manual.

Langkah 4: Tentukan tabel pivot.

Hubungan banyak-ke-banyak membutuhkan meja perantara untuk mengelola hubungan.

Implementasi tabel perantara yang paling mudah, dikenal sebagai a tabel pivot , akan hanya terdiri dari dua kolom untuk menyimpan kunci asing yang menunjuk pada setiap pasangan catatan terkait.

Cara membuat tabel pivot di Laravel

  1. Nama tabel pivot harus terdiri dari tunggal nama kedua tabel, dipisahkan oleh simbol menggarisbawahi, dan nama -nama ini harus diatur alfabetis memesan, jadi kita harus memilikinya Category_product , bukan Kategori Produk
  2. Untuk membuat tabel pivot, kita dapat membuat migrasi sederhana dengan Artisan Make: Migrasi Atau gunakan paket komunitas Laravel 5 Generator diperpanjang . Misalnya, kami memiliki perintah Artisan Make: Migrasi: Pivot
  3. Bidang Tabel Pivot: Secara default, seharusnya hanya ada dua bidang – kunci asing untuk setiap tabel, dalam kasus kami kategori_id dan ID Produk . Anda dapat memasukkan lebih banyak bidang jika perlu, maka Anda perlu menambahkannya ke tugas hubungan.

Mari kita gunakan aturan di atas dalam contoh kita.

Jadi, kami telah mendefinisikan dua skema tabel 1) Kategori 2) Produk.

Sekarang, kita perlu mendefinisikan tabel ketiga, yang merupakan tabel pivot.

Itu Tabel pivot adalah hubungan antara dua tabel.

Sehingga Tabel pivot memiliki kolom ini.

  1. Indo
  2. kategori_id
  3. ID Produk

Sekarang, kami menciptakan Banyak hubungan; itu itulah sebabnya banyak produk memiliki kategori. Misalnya, untuk membuat file migrasi, ketik perintah berikut.

php artisan make:migration create_category_product_table --create=category_product 

Sekarang, tentukan skema berikut dalam file migrasi.

// create_category_product_table

/**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('category_product', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('category_id')->unsigned();
            $table->integer('product_id')->unsigned();
        });
    } 

Sekarang, bermigrasi menggunakan perintah berikut.

php artisan migrate 

Langkah 5: Tentukan banyak hubungan.

Sekarang, beberapa kategori termasuk beberapa produk. Jadi di dalam Product.php file, kami dapat menentukan milik hubungan.

// Product.php

belongsToMany(Category::class);
    }
}
 

Juga, sama untuk produk. Beberapa produk termasuk beberapa kategori. Jadi di dalam Category.php file, kami dapat menentukan milik hubungan.

// Category.php

belongsToMany(Product::class);
    }
}
 

Jadi, kami telah mendefinisikan hubungan di antara mereka.

Sekarang, mari kita membuat produk baru dan menetapkan kategori ke produk.

Langkah 6: Buat produk.

Dalam skenario real-time, kami membuat formulir, dan kemudian melalui a POS permintaan, kami memasukkan Produk data ke dalam tabel.

Namun, dalam contoh ini, kami tidak akan mendefinisikan bentuk apa pun; Kami langsung menyimpan data ke dalam database karena tujuan kami adalah menggunakan banyak hubungan dengan skenario yang kompleks.

Sekarang, tentukan rute yang menyimpan produk ke dalam database dan menugaskan produk ke kategori menggunakan banyak hubungan.

Sekarang, kami memiliki empat (4) kategori. Jadi, kami membuat produk dan menetapkan dua kategori ke satu produk.

Pertama, buat ProductController menggunakan perintah berikut.

php artisan make:controller ProductController 

Langkah selanjutnya, tentukan rute untuk menyimpan produk.

Sekarang, saya menggunakan permintaan GET untuk menyimpan data karena kami belum membuat formulir, jadi kami mengambil setiap data secara manual.

// ProductController.php

Route::get('product/create', 'ProductController@create')->name('product.create'); 

Impor kedua model dalam hal ini ProductController.php mengajukan.

Juga, sekarang, apa yang akan kita lakukan adalah kita akan membuat satu produk yang termasuk dalam banyak kategori.

Dalam contoh ini tutorial, kami akan membuat file Produk ditelepon Dewa perang.

Sekarang, Dewa Perang termasuk dalam dua kategori.

  1. Video game
  2. PlayStation

Jadi, ketika kita membuat produk, kita juga perlu mengisi tabel pivot dengan dua kategori.

Jadi, Product_ID kami akan menjadi satu tetapi, kategori_id akan berbeda sehingga akan membuat dua baris di Category_product meja.

Sekarang, tulis kode berikut di dalam ProductController Buat () fungsi.

// ProductController.php

name = 'God of War';
        $product->price = 40;

        $product->save();

        $category = Category::find([3, 4]);
        $product->categories()->attach($category);

        return 'Success';
    }
} 

Penjelasan.

Pertama, kami telah membuat produk dan menyimpannya di produk meja.

Sekarang, sekarang saatnya untuk menetapkan kategori ke produk yang baru dibuat.

Karena kita membutuhkan ID kategori, jadi sekarang, saya telah mengkode secara manual, tetapi secara real-time, Anda memiliki ID-ID dalam permintaan formulir.

Sekarang, The menempel () Fungsi akan menetapkan ID kategori tersebut ke produk yang baru dibuat dan membuat dua baris baru di dalam tabel pivot. Setiap baris memiliki hubungan dengan produk dan kategorinya.

Langkah selanjutnya adalah menuju URL ini: http: //relationships.test/product/create atau http://localhost:8000/product/create

Anda dapat melihat “kesuksesan.”

ow, buka database dan lihat produk meja.

Many

Anda juga dapat memeriksa tabel pivot, yaitu A create_product meja.

Jika kita telah melakukan semuanya dengan benar, kita dapat melihat dua baris di dalam tabel, di mana Product_id sama 1 untuk kedua baris, tetapi Category_id berbeda, yaitu 3 dan 4.

Laravel

Yayy !!, kami telah berhasil melampirkan dua kategori ke satu produk.

Langkah selanjutnya adalah menampilkan informasi produk dan menampilkan semua kategori di dalam produk itu.

Langkah 7: Tampilkan informasi produk.

Tentukan rute yang dapat menampilkan semua informasi.

// web.php

Route::get('product/{product}', 'ProductController@show')->name('product.show');
 

Sekarang, tentukan fungsi acara ProductController.

Dalam fungsi ini, saya menggunakan pengikatan model perutean.

// ProductController.php

public function show(Product $product)
{
   return view('product.show', compact('product'));
} 

Kami melewati ID produk dalam permintaan GET, kami mengambil detail produk melalui pengikatan model rute secara langsung dan memberikan detail produk itu ke tampilan.

Buat folder baru di dalam pandangan Folder menelepon produk Dan di dalamnya, buat satu file yang dipanggil show.blade.php.

Tulis kode berikut di dalam show.blade.php mengajukan. Kami menampilkan nama produk, harga, dan termasuk kategori.

// show.blade.php

Product Name:

{{ $product->name }} || ${{ money_format($product->price, 2) }}

Product Belongs to

    @foreach($product->categories as $category)
  • {{ $category->title }}
  • @endforeach

Seperti yang telah kita tentukan hubungan, kita dapat secara langsung mengambil semua kategori dari model produk, yang merupakan keajaiban hubungan yang fasih dalam Laravel.

Sekarang, buka URL ini: http: //relationships.test/product/1 atau http://localhost:8000/product/1

Seperti yang Anda lihat, kami hanya memiliki satu produk yang dibuat untuk melihat hanya satu detail produk.

Laravel

Jadi, ini adalah bagaimana Anda dapat menambahkan beberapa kategori ke suatu produk dan menampilkan beberapa kategori untuk suatu produk.

Sekarang, Anda dapat membuat sebanyak mungkin produk yang Anda inginkan dan menetapkan beberapa kategori untuk mereka.

Anda juga dapat menghapus hubungan antara tabel menggunakan fungsi detach ().

Fungsi detach ().

// ProductController.php

public function removeCategory(Product $product)
{
        $category = Category::find(3);

        $product->categories()->detach($category);
        
        return 'Success';
} 

Sekarang, tentukan rute berikut di dalam a web.php mengajukan.

// web.php

Route::get('category/product/{product}', 'ProductController@removeCategory')->name('category.product.delete');
 

Selanjutnya, ketik url ini: http: //relationships.test/category/product/1 atau http://localhost:8000/category/product/1.

Tekan Enter, dan kami mendapatkan kesuksesan sekarang. Buka database MySQL dan periksa Category_product meja.

Anda dapat melihat bahwa kategori_id = 3 baris dihapus, dan kami tidak lagi termasuk dalam kategori_id = 3.

Laravel

Jadi, inilah cara Anda dapat mempertahankan Banyak hubungan di Laravel.

Kesimpulan

Laravel banyak ke banyak hubungan menghubungkan catatan di atas meja dengan satu atau banyak catatan di tabel lain dan sebaliknya. Tidak seperti Laravel Satu untuk banyak dan Satu ke satu , kuncinya adalah tabel pivot dalam hubungan ini. Tabel pivot adalah tabel di mana Anda menentukan antara dua tabel untuk menautkannya. Tabel pivot memungkinkan hubungan Indo Dari satu model yang terkait dengan banyak model lain dan sebaliknya.

Salah satu contoh kehidupan nyata yang dapat kita pikirkan adalah produk dan kategori. Suatu kategori dapat memiliki banyak produk, dan suatu produk dapat berhubungan dengan banyak kategori; Sederhana tidak.

Itu saja untuk banyak tutorial hubungan banyak ini.

Pos terkait

Hubungan Laravel

Hubungan polimorfik Laravel

Hubungan Laravel Hasmanythrough

Laravel satu untuk banyak hubungan

Hubungan fasih Laravel

Artikel ini berasal dari website Winpoin, dan kemudian diterjemahkan ke bahasa indonesia, baca artikel asli disini

Leave a Reply

Your email address will not be published. Required fields are marked *