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
- Mối quan hệ đa hình một đối một
- Mối quan hệ một đến nhiều đa hình
- Mối quan hệ nhiều đến nhiều đa hình
- 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
- bài viết
- băng hình
- 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
- commentable_id [Số nguyên]
- 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
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
- PostController
- 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 relationships0
Tương tự đối với VideoController. tệp php
cd relationships1
Bây giờ, hãy tạo hai thư mục bên trong thư mục lượt xem
- bưu kiện
- 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 relationships2
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.
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 relationships3
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 relationships4
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 relationships5
Bây giờ, hãy viết giản đồ sau bên trong create_comments_table
cd relationships6
Di chuyển lược đồ đó vào cơ sở dữ liệu
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 relationships8
Đượ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 relationships9
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