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 Show
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. 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
Tạo di chuyển của Bảng vai trò
Tạo di chuyển của Bảng người dùng vai trò
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
Người mẫu
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 -m6 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 -m7 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ểnuse 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ẩmuse 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ẩmnamespace 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 PivotBâ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 -m8 và php artisan make:model Category -m php artisan make:model Product -m9 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 -m6, php artisan make:model Category -m php artisan make:model Product -m8 và php artisan make:model Category -m php artisan make:model Product -m9. 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 EloquentCuố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 -m0 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 -m1 Tạo mối quan hệ Many To ManyBâ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 -m2 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 Thêm danh mụcBâ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 -m3 Đ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 thêm sản phẩmTrong 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 -m9 1 có nhiều mục nhập với php artisan make:model Category -m php artisan make:model Product -m8 2 và 3Ví 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 -m4 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ềuCá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 -m5 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 -m8 2 đã bị xóa khỏi bảngTách hồ sơ Phần kết luậnTrong 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 |