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
Show
Mối quan hệ đa hình của LaravelTheo 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ộtMố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ìnhMố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ìnhMố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ỉnhVí 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â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
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 6Nhậ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ểnChuyể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
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
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à VideoBê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 xemBê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étNhậ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étChú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. |