Mối quan hệ đa hình trong Laravel là gì

Mối quan hệ đa hình của Laravel cho phép một mô hình thuộc về nhiều mô hình khác trên một liên kết duy nhất. Chúng tôi sẽ lấy một ví dụ về tài liệu chính thức của Laravel cho hướng dẫn này. Hãy để chúng tôi lấy ví dụ về “bình luận” trong cả bài đăng và video. Khi sử dụng các mối quan hệ đa hình, bạn có thể sử dụng một bảng nhận xét duy nhất cho cả hai trường hợp này

Mối quan hệ đa hình của Laravel

Theo mặc định, Laravel sẽ sử dụng tên lớp đủ điều kiện để lưu trữ loại mô hình liên quan

Có bốn loại mối quan hệ Đa hình trong Laravel

  1. Mối quan hệ đa hình một đối một
  2. Mối quan hệ một đến nhiều đa hình
  3. Mối quan hệ nhiều đến nhiều đa hình
  4. Mối quan hệ đa hình tùy chỉnh

Mối quan hệ đa hình một đối một

Mối quan hệ đa hình một đối một có thể so sánh với mối quan hệ một đối một đơn giản;

Ví dụ: Bài đăng trên blog và Người dùng có thể chia sẻ mối quan hệ đa hình với mô hình Hình ảnh

Sử dụng mối quan hệ đa hình một đối một cho phép bạn có một danh sách các hình ảnh duy nhất được chấp nhận cho cả bài đăng trên blog và tài khoản người dùng

Mối quan hệ một đến nhiều đa hình

Mối quan hệ đa hình một-nhiều có thể so sánh với mối quan hệ một-nhiều đơn giản;

Ví dụ: hãy tưởng tượng người dùng ứng dụng của bạn có thể “bình luận” trên cả bài đăng và video

Sử dụng các mối quan hệ đa hình, bạn có thể sử dụng bảng nhận xét duy nhất cho cả hai trường hợp sử dụng này

Mối quan hệ nhiều đến nhiều đa hình

Mối quan hệ đa hình nhiều-nhiều phức tạp hơn một chút so với mối quan hệ morphOne và morphMany

Chẳng hạn, mô hình Bài đăng và Video trên blog có thể chia sẻ mối quan hệ đa hình với mô hình Thẻ

Sử dụng mối quan hệ đa hình nhiều-nhiều cho phép, bạn có một danh sách các thẻ duy nhất được chia sẻ trên các bài đăng và video trên blog

Mối quan hệ đa hình tùy chỉnh

Ví dụ: với ví dụ một-nhiều ở trên, trong đó Nhận xét có thể thuộc về Bài đăng hoặc Video, commentable_type mặc định sẽ lần lượt là Ứng dụng\Bài đăng hoặc Ứng dụng\Video

Tuy nhiên, bạn có thể muốn tách rời cơ sở dữ liệu của mình khỏi cấu trúc bên trong của ứng dụng

Trong trường hợp đó, bạn có thể đặt “bản đồ hình thái” để hướng dẫn Eloquent sử dụng tên tùy chỉnh cho từng mô hình thay vì tên lớp

Bây giờ, hãy lấy một ví dụ chung về mối quan hệ Đa hình

Có tổng cộng ba bảng

  1. bài viết
  2. băng hình
  3. bình luận

Bây giờ, lý do chúng ta có thể áp dụng Mối quan hệ đa hình ở đây là nhận xét có thể được áp dụng cho cả bài đăng và video

Vì vậy, mô hình Nhận xét có thể được liên kết với Bài đăng và Video

Bây giờ, chúng ta cần thêm hai cột bổ sung bên trong bảng bài viết

  1. commentable_id [Số nguyên]
  2. commentable_type [Chuỗi]

Cột  commentable_id  sẽ chứa giá trị ID của bài đăng hoặc video.

Cột commentable_type sẽ chứa tên lớp của mô hình sở hữu.

Bây giờ, chúng ta hãy bắt đầu thực hành trên Ví dụ về mối quan hệ đa hình của Laravel

Chúng tôi bắt đầu dự án của mình bằng cách cài đặt dự án Laravel

Bước 1. Cài đặt Laravel 6

Nhập lệnh sau trong thiết bị đầu cuối của bạn

laravel new relationships

# or

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

Sau khi cài xong vào project

cd relationships

Mở dự án trong trình chỉnh sửa mã của bạn

code .

Thiết lập cơ sở dữ liệu bên trong. tệp env

Bây giờ, hãy tạo giàn giáo Xác thực bằng lệnh sau

php artisan make:auth

Bước 2. Tạo mô hình và di chuyển

Chuyển đến thiết bị đầu cuối của bạn và trước tiên hãy tạo mô hình Bài đăng

php artisan make:model Post -m

Ngoài ra, chúng tôi tạo mô hình Video 

php artisan make:model Video -m

Bây giờ, hãy xác định lược đồ cho cả hai lần di chuyển. Nhưng, trước tiên, chúng ta hãy định nghĩa một lược đồ cho create_posts_table

// create_posts_table

public function up[]
{
   Schema::create['posts', function [Blueprint $table] {
        $table->increments['id'];
        $table->string['name'];
        $table->timestamps[];
    }];
}

Bây giờ hãy xác định giản đồ cho create_videos_table

// create_videos_table

public function up[]
{
     Schema::create['videos', function [Blueprint $table] {
         $table->increments['id'];
         $table->string['name'];            
         $table->timestamps[];
     }];
}

Được rồi, bây giờ di chuyển bằng lệnh sau

________số 8

Bước 3. Tạo hai tệp điều khiển

Được rồi, bây giờ chúng ta sẽ tạo hai bộ điều khiển để hiển thị chế độ xem

  1. PostController
  2. Trình điều khiển video

Nhập lệnh sau để tạo nó

php artisan make:controller PostController
php artisan make:controller VideoController

Bây giờ, hãy viết đoạn mã sau bên trong PostController. tệp php

cd relationships
0

Tương tự đối với VideoController. tệp php

cd relationships
1

Bây giờ, hãy tạo hai thư mục bên trong thư mục lượt xem

  1. bưu kiện
  2. băng hình

Trong thư mục bài đăng, hãy tạo một tệp mới có tên là chương trình. lưỡi. tệp php. Ngoài ra, cùng tạo ra cùng một chương trình. lưỡi. php bên trong thư mục video

Bước 4. Xác định các tuyến đường để hiển thị Bài đăng và Video

Bên trong trang web. php, hãy viết đoạn mã sau

cd relationships
2

Bây giờ, hãy nhập dữ liệu theo cách thủ công vào cơ sở dữ liệu. Trong thời gian thực, dữ liệu đến từ một biểu mẫu, nhưng đối với bản minh họa này, Trước tiên, hãy nhập một số dữ liệu giả vào bảng bài đăng.

Bây giờ, hãy chèn dữ liệu vào bảng video

Vì vậy, chúng tôi đã chèn dữ liệu giả vào cả hai bảng

Bước 5. Mã hóa các tập tin xem

Bên trong bài đăng  >>  hiển thị. lưỡi. php, hãy viết đoạn mã sau

cd relationships
3

Bây giờ, hãy vào trình duyệt và nhập URL này. http. //các mối quan hệ. kiểm tra/bài đăng/1. Bạn có thể xem bài viết đầu tiên

Tương tự đối với video  >>  chương trình. lưỡi. php, hãy viết đoạn mã sau

cd relationships
4

Tương tự, vào trình duyệt và nhấn URL này. http. //các mối quan hệ. thử nghiệm/video/1. Bạn có thể xem video đầu tiên

Bước 6. Tạo mô hình Nhận xét

Nhập lệnh sau để tạo mô hình cũng như di chuyển

cd relationships
5

Bây giờ, hãy viết giản đồ sau bên trong create_comments_table

cd relationships
6

Di chuyển lược đồ đó vào cơ sở dữ liệu

________số 8

Bước 7. Xác định các mối quan hệ

Bây giờ, chúng tôi lưu trữ một user_id bên trong bảng nhận xét;

Nhận xét thuộc về Người dùng. Vì vậy, chúng ta có thể viết mối quan hệ này bên trong Comment. tập tin mô hình php

cd relationships
8

Được rồi, bây giờ chúng ta viết thêm một hàm bên trong Comment. php có thể nhận xét[]

cd relationships
9

Bây giờ, điều này có nghĩa là bây giờ một hoặc nhiều mô hình có thể sử dụng mô hình Nhận xét này. Trong ví dụ của chúng tôi, Nó có thể được liên kết với Bài đăng và Video. Cả hai đều sử dụng cùng một mô hình Nhận xét này

Được rồi, vậy bước tiếp theo là mô hình bài đăng có nhiều bình luận. Vì vậy, chúng tôi có thể xác định mối quan hệ bên trong Post. php tệp như thế này

code .
0

Tương tự với Video. tệp php

code .
1

Bước 8. Chèn dữ liệu thủ công vào trong bảng nhận xét

Chúng tôi đã thiết lập tất cả các mối quan hệ. Chúng tôi cần nhập nhận xét demo và xem liệu chúng tôi có nhận được nhận xét trên trang hiển thị của video và bài đăng không

Vì vậy, cột đầu tiên là id, như thường lệ, tự động tăng, cột thứ hai là user_id, hiện là người dùng đã ký

Cột thứ ba là commentable_id;

Vì vậy, chúng tôi đã đính kèm bảng bài đăng và video vào nhận xét tương ứng của họ

Bây giờ, hãy hiển thị bài đăng cùng với nhận xét của họ trong chương trình. lưỡi. tệp php

code .
2

Truy cập trình duyệt và nhấn URL này. http. //các mối quan hệ. kiểm tra/bài đăng/1. Bạn có thể thấy tên bài đăng và nội dung nhận xét.  

Bạn có thể ghi cùng một tệp xem cho video  >>  show. lưỡi. php

code .
3

Bây giờ, hãy kiểm tra URL này. http. //các mối quan hệ. thử nghiệm/video/1

Đó là nó;

Mặc dù, trong ví dụ này, tôi đã chèn các giá trị mã hóa cứng, nhưng chúng ta sẽ thấy lập trình trong tương lai

Mối quan hệ đa hình là gì?

Mối quan hệ đa hình là trong đó một mô hình có thể thuộc về nhiều mô hình khác trên một liên kết duy nhất . Để làm rõ điều này, hãy tạo một tình huống tưởng tượng trong đó chúng ta có Mô hình Chủ đề và Bài đăng. Người dùng có thể để lại nhận xét về cả chủ đề và bài đăng.

Có bao nhiêu loại mối quan hệ trong Laravel?

Nó cung cấp 3 loại mối quan hệ chính và 2 loại trung gian . Hãy đi sâu vào từng mối quan hệ trong laravel này khi chúng ta mô tả ý nghĩa của chúng và cách chúng ta có thể định nghĩa chúng.

Các loại mối quan hệ khác nhau mà chúng ta có thể xác định trên các mô hình trong Laravel là gì?

Một Đối Một [Đa hình] Một Đối Nhiều [Đa hình] Nhiều Đối Nhiều [Đa hình]

Làm cách nào để tạo mối quan hệ giữa hai bảng trong Laravel?

Để xác định mối quan hệ, trước tiên chúng ta cần xác định phương thức post[] trong mô hình Người dùng . Trong phương thức post[], chúng ta cần triển khai phương thức hasOne[] trả về kết quả. Hãy hiểu mối quan hệ 1-1 thông qua một ví dụ. Đầu tiên, chúng tôi thêm cột mới [user_id] vào bảng hiện có có tên là bài viết.

Chủ Đề