Laravel nhiều đến nhiều ví dụ

Trong bài viết này, chúng ta sẽ thấy mối quan hệ many to many trong ví dụ về laravel 9. Mối quan hệ nhiều-nhiều phức tạp hơn mối quan hệ một-một và một-nhiều. Một ví dụ về mối quan hệ giống như một người dùng có nhiều vai trò, trong đó vai trò cũng được kết nối với nhiều người dùng. Ngoài ra, bạn có thể sử dụng nhiều mối quan hệ trong laravel 6 và laravel 7 và laravel 8

Vì vậy, chúng ta hãy xem mối quan hệ nhiều với nhiều của laravel 9, ví dụ về laravel 9 hasMany, mối quan hệ eloquent của laravel 9 và mối quan hệ của laravel 9

Chúng tôi sẽ tạo một bảng Người dùng và Vai trò và Role_users. tất cả các bảng được kết nối với nhau bảng. Bây giờ chúng ta sẽ tạo nhiều mối quan hệ với nhau bằng cách sử dụng Eloquent Model của laravel

Ngoài ra, chúng tôi sẽ tạo di chuyển bằng khóa ngoại, đồng bộ hóa với bảng tổng hợp, truy xuất bản ghi bằng mô hình, chèn bản ghi mới, cập nhật bản ghi, v.v.

Laravel nhiều đến nhiều ví dụ

Bây giờ, chúng ta phải tạo di chuyển cho người dùng và bảng vai trò và vai trò_người dùng. chúng tôi cũng sẽ thêm các khóa ngoại vào bảng người dùng và vai trò

Tạo bảng di chuyển người dùng

Schema::create('users', function (Blueprint $table) {

    $table->increments('id');

    $table->string('name');

    $table->string('email')->unique();

    $table->timestamps();

});

Tạo di chuyển của Bảng vai trò

Schema::create('roles', function (Blueprint $table) {

    $table->increments('id');

    $table->string('name');

    $table->timestamps();

});

Tạo di chuyển của Bảng người dùng vai trò

Schema::create('role_users', function (Blueprint $table) {

    $table->integer('user_id')->unsigned();

    $table->integer('role_id')->unsigned();

    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

    $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');

});

Tạo mô hình và thêm mối quan hệ trên cả hai mô hình

Bây giờ, chúng ta sẽ tạo Người dùng, Mô hình vai trò. chúng tôi sẽ sử dụng mối quan hệ thuộc vềToMany() cho cả hai mô hình

Mô hình người dùng

belongsToMany(Role::class, 'role_users');
    }
}

Người mẫu

belongsToMany(User::class, 'role_users');
    }
}

Truy xuất bản ghi bằng Model

Khi mối quan hệ được xác định, chúng tôi có thể truy xuất bản ghi liên quan bằng các thuộc tính động của Eloquent

Trước khi tiếp tục, tôi cho rằng bạn nên biết Mối quan hệ một đối một và Một đối nhiều hoạt động như thế nào trong Laravel

Vì vậy, hãy đi sâu vào nhiều mối quan hệ của Laravel Eloquent

Mối quan hệ nhiều đến nhiều là gì?

Mối quan hệ Nhiều Đến Nhiều liên kết một bản ghi trong bảng với một hoặc nhiều bản ghi trong một bảng khác và ngược lại. Không giống như Một đến Nhiều và Một đến Một, trong loại mối quan hệ này, chìa khóa là phép nối (bảng tổng hợp) mà bạn xác định giữa hai bảng để liên kết chúng. Bảng tổng hợp cho phép mối quan hệ

php artisan make:model Category -m
php artisan make:model Product -m
6 từ một mô hình có liên quan đến nhiều mô hình khác và ngược lại

Một ví dụ thực tế chúng ta có thể nghĩ đến là các sản phẩm và danh mục. Một danh mục có thể có nhiều sản phẩm và một sản phẩm có thể liên quan đến nhiều danh mục, đơn giản không phải. Để hiểu rõ hơn về cách chúng ta có thể sử dụng mối quan hệ này, hãy thực hiện một số mã hóa

Cài đặt Laravel trước 😃

Để bắt đầu, chúng ta sẽ tạo một ứng dụng Laravel mới. Chạy lệnh bên dưới trong thiết bị đầu cuối của bạn để tạo một ứng dụng mới

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

Khi bạn có bản cài đặt mới của Laravel, hãy tiếp tục thiết lập thông tin đăng nhập cơ sở dữ liệu của bạn trong tệp

php artisan make:model Category -m
php artisan make:model Product -m
7

Tạo mô hình và di chuyển

Đầu tiên, chúng tôi sẽ tạo hai mô hình được gọi là Sản phẩm và Danh mục cùng với quá trình di chuyển của chúng. Chạy lệnh bên dưới để tạo mô hình và di chuyển

php artisan make:model Category -m
php artisan make:model Product -m

Sau khi bạn có các mô hình và quá trình di chuyển được tạo, hãy cập nhật chúng bằng mã bên dưới

Danh mục di chuyển

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCategoriesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->text('description')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('categories');
    }
}

Hạng mục Người mẫu

// Category.php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = 'categories';

    protected $fillable = ['name', 'description'];
}

Di chuyển sản phẩm

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateProductsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->float('price');
            $table->text('description')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('products');
    }
}

dòng sản phẩm

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $table = 'products';

    protected $fillable = ['name', 'price', 'description'];
}

Bây giờ hãy vào terminal của bạn và chạy lệnh bên dưới để di chuyển cả hai bảng vào cơ sở dữ liệu

php artisan migrate

ngày giả

Vì lợi ích của hướng dẫn này, hãy thêm một số danh mục và sản phẩm giả vào cơ sở dữ liệu của bạn

Tạo bảng Pivot

Bây giờ, chúng ta cần kết nối hai bảng này bằng bảng liên kết có tên là Pivot Table. Bảng tổng hợp là một bảng quan hệ sẽ chứa

php artisan make:model Category -m
php artisan make:model Product -m
8 và
php artisan make:model Category -m
php artisan make:model Product -m
9 trong đó

Bạn có thể lưu trữ nhiều thông tin hơn trong bảng tổng hợp, nhưng hiện tại chúng ta chỉ cần tạo mối quan hệ nhiều đến nhiều. Tôi sẽ đề cập đến việc sử dụng bảng tổng hợp để lưu trữ dữ liệu bổ sung trong một bài viết riêng

Chạy lệnh bên dưới để tạo di chuyển cho bảng tổng hợp của chúng tôi

php artisan make:migration create_category_product_table

Khi bạn đã di chuyển cho bảng

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCategoriesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->text('description')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('categories');
    }
}
0, hãy cập nhật quá trình di chuyển bằng mã bên dưới

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCategoryProductTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('category_product', function (Blueprint $table) {
            $table->engine = 'MyISAM';
            $table->bigIncrements('id');
            $table->integer('category_id')->unsigned();
            $table->integer('product_id')->unsigned();

            $table->foreign('category_id')->references('id')->on('categories');
            $table->foreign('product_id')->references('id')->on('products');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('category_product');
    }
}

Trong phần di chuyển ở trên, chúng tôi đang thêm ba cột trong bảng này,

php artisan make:model Category -m
php artisan make:model Product -m
6,
php artisan make:model Category -m
php artisan make:model Product -m
8 và
php artisan make:model Category -m
php artisan make:model Product -m
9. Hãy chú ý đến quá trình di chuyển, chúng tôi cũng đang đặt các khóa ngoại trên các bảng tương ứng của chúng

Bây giờ, hãy chạy lệnh artisan để di chuyển bảng này vào cơ sở dữ liệu

php artisan migrate

Xác định mối quan hệ Many To Many trong Laravel Eloquent

Cuối cùng, đã đến lúc xác định mối quan hệ Many to Many giữa Category và Product model bằng cách sử dụng Laravel Eloquent

Đầu tiên, chúng tôi biết nhiều danh mục thuộc về nhiều sản phẩm, vì vậy chúng tôi có thể thêm mối quan hệ thuộc về nhiều trong mô hình Sản phẩm. Mở lớp mô hình Sản phẩm và thêm một phương thức mới gọi là

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCategoriesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->text('description')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('categories');
    }
}
4 như bên dưới

php artisan make:model Category -m
php artisan make:model Product -m
0

Tương tự, chúng tôi biết nhiều sản phẩm thuộc nhiều danh mục, vì vậy chúng tôi có thể xác định mối quan hệ thuộc vềToMany trên mô hình Danh mục như bên dưới. Thêm một phương thức mới trong mô hình Danh mục có tên là

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCategoriesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->text('description')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('categories');
    }
}
5 như bên dưới

php artisan make:model Category -m
php artisan make:model Product -m
1

Tạo mối quan hệ Many To Many

Bây giờ, hãy tạo một số danh mục và sản phẩm, đồng thời tạo mối quan hệ Nhiều đến Nhiều giữa chúng. Đầu tiên chúng ta sẽ tạo một số danh mục như bên dưới (Việc bạn thêm sản phẩm và danh mục như thế nào là hoàn toàn do bạn quyết định)

php artisan make:model Category -m
php artisan make:model Product -m
2

Bây giờ bạn sẽ có một số danh mục như bên dưới trong bảng danh mục của mình

Laravel nhiều đến nhiều ví dụ
Thêm danh mục

Bây giờ chúng ta sẽ tạo một sản phẩm và gắn chúng vào một vài danh mục

php artisan make:model Category -m
php artisan make:model Product -m
3

Đoạn mã trên sẽ tạo một sản phẩm rồi gắn sản phẩm đó vào nhiều danh mục

Laravel nhiều đến nhiều ví dụ
thêm sản phẩm

Trong bảng

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCategoriesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->text('description')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('categories');
    }
}
0, bạn có thể thấy
php artisan make:model Category -m
php artisan make:model Product -m
9 1 có nhiều mục nhập với
php artisan make:model Category -m
php artisan make:model Product -m
8 2 và 3

Laravel nhiều đến nhiều ví dụ
Ví dụ xoay vòng

Đó là cách bạn có thể tạo nhiều mối quan hệ trong Laravel Eloquent. Rõ ràng, bạn có thể sử dụng nghịch đảo của mối quan hệ này để đính kèm một danh mục cho nhiều sản phẩm

Truy xuất nhiều đến nhiều dữ liệu quan hệ

Khi bạn đã thiết lập mối quan hệ và tạo một số bản ghi, bạn có thể bắt đầu sử dụng các bản ghi liên quan cho một mô hình cụ thể. Trong ví dụ của chúng ta, chúng ta có thể sử dụng phương pháp

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCategoriesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->text('description')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('categories');
    }
}
9 để lấy các danh mục liên quan cho một sản phẩm và tương tự, chúng ta có thể sử dụng
// Category.php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = 'categories';

    protected $fillable = ['name', 'description'];
}
0 để lấy tất cả các sản phẩm cho một danh mục nhất định

php artisan make:model Category -m
php artisan make:model Product -m
4

Vì mối quan hệ nhiều-nhiều luôn trả về tập hợp, bạn có thể chạy vòng lặp trên đó để hiển thị bản ghi của mình

Xóa một mối quan hệ nhiều thành nhiều

Cách chúng ta đã sử dụng phương pháp

// Category.php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = 'categories';

    protected $fillable = ['name', 'description'];
}
1 để gắn nhiều mô hình vào nhiều mô hình, chúng ta có thể sử dụng
// Category.php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = 'categories';

    protected $fillable = ['name', 'description'];
}
2 để loại bỏ mối quan hệ nhiều với nhiều giữa các mô hình

php artisan make:model Category -m
php artisan make:model Product -m
5

Bây giờ hãy đi tới bảng

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCategoriesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->text('description')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('categories');
    }
}
0 của bạn và bạn sẽ thấy rằng bản ghi
php artisan make:model Category -m
php artisan make:model Product -m
8 2 đã bị xóa khỏi bảng

Laravel nhiều đến nhiều ví dụ
Tách hồ sơ

Phần kết luận

Trong hướng dẫn này, chúng ta đã xem xét cách sử dụng mối quan hệ Many to Many trong Laravel Eloquent. Tôi sẽ khuyên bạn nên dành thời gian tốt để đọc

Nếu bạn có bất kỳ câu hỏi nào về bài đăng này, hãy để lại trong hộp bình luận bên dưới và chúng tôi sẽ trả lời ngay lập tức

Làm cách nào để sử dụng nhiều thành nhiều trong Laravel?

Làm cách nào để triển khai nhiều mối quan hệ trong Laravel? .
Tạo một dự án Laravel. Bước đầu tiên sẽ là tạo một dự án Laravel. .
Tạo một mô hình và di chuyển. .
Tạo một bảng tổng hợp. .
Xác định nhiều mối quan hệ. .
Sử dụng Mối quan hệ Nhiều đến Nhiều trong Bộ điều khiển của chúng tôi. .
Truy xuất hồ sơ

ORM trong Laravel là gì?

Eloquent là một trình ánh xạ quan hệ đối tượng (ORM) được bao gồm theo mặc định trong khuôn khổ Laravel. ORM là phần mềm hỗ trợ xử lý các bản ghi cơ sở dữ liệu bằng cách biểu diễn dữ liệu dưới dạng các đối tượng, hoạt động như một lớp trừu tượng trên cùng của công cụ cơ sở dữ liệu được sử dụng để lưu trữ dữ liệu của ứng dụng.

Tính đa hình trong Laravel là gì?

Ví dụ: trong một blog, các nhận xét có thể xuất hiện trên một bài đăng hoặc một trang nhưng vẫn giữ nguyên cấu trúc bất kể đó là một bài đăng hay một trang. This kind of behavior is described as polymorphism. In this article, we will go over polymorphic relationships in Laravel, how they work and the various use cases in which they are best used.

Làm cách nào để sử dụng hasOne trong Laravel?

Hãy giải thích việc sử dụng hasOne trong bảng nhận xét bài viết .
Tạo bình luận và mô hình bài viết
Tạo mối quan hệ hasOne trong mô hình vật phẩm
Sử dụng quan hệ trong bộ điều khiển
Tạo tuyến đường