Rate this post

Mối quan hệ hùng hồn là một tính năng rất quan trọng trong Laravel cho phép bạn liên kết các bảng theo một định dạng rất dễ dàng.

Các bài viết liên quan:

Mối quan hệ 1-1

Mối quan hệ 1-1 cung cấp mối quan hệ 1-1 giữa các cột của các bảng khác nhau. Ví dụ: mỗi người dùng được liên kết với một bài đăng hoặc có thể nhiều bài đăng, nhưng trong mối quan hệ này, chúng tôi sẽ truy xuất bài đăng duy nhất của một người dùng. Để 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) trong một bảng hiện có có tên là bài đăng. Ở đây, user_id là khóa ngoại.

  • Di chuyển các thay đổi ở trên trong cơ sở dữ liệu bằng cách sử dụng lệnh dưới đây:

php artisan migrate.

  • Sau khi di chuyển, cấu trúc của bảng bài đăng được hiển thị trong ảnh chụp màn hình bên dưới:

Ảnh chụp màn hình ở trên cho thấy rằng cột user_id đã được thêm thành công.

  • Mở tệp User.php và thêm mã sau vào tệp User.php.

Trong đoạn mã trên, chúng ta đã triển khai phương thức hasOne () có chứa đối số duy nhất, tức là tên của mô hình liên quan. Theo mặc định, Post coi user_id là khóa ngoại. Phương thức post () tìm kiếm bảng bài đăng vì chúng ta đã đề cập đến không gian tên ‘Ứng dụng / Bài đăng’ và tìm kiếm cột user_id. Chúng ta có thể ghi đè quy ước này bằng cách cung cấp khóa ngoại làm đối số thứ hai. Nó có thể được viết lại thành:

return $ this-> hasOne (‘App \ Post’, Foreign_key)

  • Bây giờ, chúng tôi sẽ thêm tuyến đường trong tệp web.php.

Đoạn mã trên là tìm người dùng có id số 1 và sau đó triển khai bài đăng để tìm bài đăng của người dùng có user_id bằng 1.

Đầu ra

Mối quan hệ nghịch đảo

Quan hệ nghịch đảo nghĩa là nghịch đảo của mối quan hệ một-một. Ở trên, chúng tôi đã truy xuất bài đăng thuộc về một người dùng cụ thể. Bây giờ, chúng tôi lấy thông tin người dùng dựa trên bài đăng. Hãy hiểu điều này thông qua một ví dụ.

Đầu tiên, chúng ta tạo đường dẫn trong tệp web.php.

  • Mở tệp Post.php (mô hình) mà chúng tôi đã tạo trước đó.

Đầu ra

Mối quan hệ một-nhiều

Laravel cũng cung cấp mối quan hệ một-nhiều.

  • Đầu tiên, chúng tôi xác định lộ trình tìm ra tất cả các bài đăng của một người dùng.
  • Thêm mã sau vào tệp User.php (model).

Đầu ra

Mối quan hệ nhiều-nhiều

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. Để xác định mối quan hệ nhiều-nhiều, chúng ta cần tạo một bảng tổng hợp. Bảng tổng hợp về cơ bản là một bảng tra cứu liên quan đến hai bảng. Ví dụ: một người dùng có thể có các vai trò khác nhau trong đó những người dùng khác có thể chia sẻ các vai trò, giống như nhiều người dùng có thể có vai trò ‘Quản trị viên’. Để xác định mối quan hệ giữa người dùng và vai trò, chúng ta cần tạo ba bảng, người dùng, vai trò và vai trò người dùng. Trong cơ sở dữ liệu của chúng tôi, bảng người dùng đã được tạo; chúng ta cần tạo hai bảng, tức là bảng vai trò và bảng tổng hợp (role_user).

  • Đầu tiên, chúng tôi tạo mô hình Vai trò. Chúng tôi sử dụng lệnh sau để tạo mô hình:

php artisan make:model Role -m

Màn hình trên cho thấy rằng bảng vai trò đã được tạo. Create_roles_table.php đã được tạo trong cơ sở dữ liệu / thư mục di chuyển. Cấu trúc của tệp này được đưa ra dưới đây:

Trong đoạn mã trên, chúng tôi đã thêm cột mới có tên là ‘name’. Cột ‘tên’ xác định tên của vai trò của người dùng.

  • Bây giờ, chúng ta có hai bảng, bảng vai trò và bảng người dùng. Để liên kết hai bảng này, chúng ta cần tạo bảng pivot, bảng role_user.

Màn hình trên cho thấy bảng role_user đã được tạo. Cấu trúc của create_roles_user_table được đưa ra dưới đây:

Trong đoạn mã trên, chúng tôi đã thêm hai cột mới, user_id và role_id.

Di chuyển tất cả các thay đổi ở trên bằng cách sử dụng lệnh dưới đây:

php artisan migrate

  • Màn hình bên dưới hiển thị tất cả ba bảng, tức là vai trò, người dùng vai trò và người dùng được tạo.

Dữ liệu có sẵn trong bảng vai trò:

Dữ liệu có sẵn trong bảng người dùng:

Dữ liệu có sẵn trong bảng role_user:

  • Bây giờ, chúng tôi xác định tuyến đường.

web.php

  • Chúng tôi thêm mã sau vào tệp User.php liên quan đến cả hai bảng.

Trong đoạn mã trên, phương thức ThuộcToMany () chứa hai tham số, ‘App \ Role’, là không gian tên để sử dụng mô hình Vai trò và ‘role_user’ là tên của bảng tổng hợp liên quan đến hai bảng. Phương thức inheritToMany () cũng có thể được viết như sau:

belongToMany (‘App \ Role’, ‘role_user’, ‘user_id’, ‘role_id’);

Dòng trên chứa thêm hai tham số, user_id và role_id. User_id là khóa ngoại cho bảng người dùng và role_id là khóa ngoại cho bảng vai trò.

Đầu ra

Truy cập bảng trung gian / tổng hợp

Trong mối quan hệ nhiều-nhiều, chúng tôi tạo bảng tổng hợp hoặc bảng trung gian. Bây giờ, chúng ta sẽ xem cách lấy bảng tổng hợp này.

Trong mô hình trên, chúng tôi đang truy xuất người dùng có id bằng 1. Sau đó, sử dụng vòng lặp foreach, chúng tôi đang truy xuất mô hình vai trò và được gán trong thuộc tính pivot.

Nếu chúng ta muốn truy xuất cột cụ thể từ bảng tổng hợp,

web.php

Đầu ra

Có nhiều thông qua

Mối quan hệ ‘có nhiều thông qua’ cung cấp một cách thuận tiện để truy cập các mối quan hệ xa hoặc trung gian. Ví dụ, chúng tôi có ba bảng, người dùng, bài đăng và bảng quốc gia. Bây giờ, chúng tôi muốn tìm các bài đăng thuộc quốc gia đó thông qua mô hình Người dùng.

Chúng ta hãy hiểu thông qua một ví dụ.

  • Bảng quốc gia không có sẵn trong cơ sở dữ liệu. Đầu tiên chúng tôi tạo mô hình quốc gia với việc di chuyển cơ sở dữ liệu.
  • Thêm cột ‘name’ trong bảng quốc gia.
  • Di chuyển các thay đổi ở trên bằng cách sử dụng lệnh dưới đây:

php artisan migrate

  • Bây giờ, chúng tôi thêm cột mới ‘country_id’ trong bảng người dùng. Sử dụng lệnh dưới đây:

php artisan make:migration add_new_column_column_id -table=users;

  • Sau khi thực hiện lệnh trên, tệp add_new_column_column_id được tạo trong thư mục cơ sở dữ liệu / di chuyển.

Trong đoạn mã trên, chúng tôi đã thêm một cột mới trong bảng người dùng.

Để di chuyển những thay đổi ở trên trong cơ sở dữ liệu,

php artisan migrate

Mở tệp country.php (model). Chúng tôi sẽ kéo các bài đăng của một quốc gia cụ thể bằng cách sử dụng mô hình quốc gia.

country.php

  • Bây giờ, chúng tôi thêm tuyến đường kéo các bài đăng của một quốc gia cụ thể.

Đầu ra

Mối quan hệ đa hình

Một-nhiều (Đa hình)

Mối quan hệ Đa hình tương tự như mối quan hệ một – nhiều. Khi một mô hình duy nhất thuộc về nhiều loại mô hình trên một kết hợp duy nhất được gọi là mối quan hệ đa hình một-một. Ví dụ: nếu chúng ta có ba bảng, bài đăng, người dùng và bảng ảnh, trong đó bảng ảnh đại diện cho mối quan hệ đa hình với bảng người dùng và bài đăng.

Hãy hiểu mối quan hệ này thông qua một ví dụ.

  • Chúng tôi đã tạo người dùng và bảng bài đăng trong chủ đề trước. Bây giờ, chúng ta tạo một bảng ảnh.

Mở tệp create_photos_table.php được tạo trong thư mục di chuyển.

Trong đoạn mã trên, chúng tôi đã thêm ba cột, đường dẫn, imageable_id, và imageable_type. Đường dẫn xác định đường dẫn của hình ảnh, imageable_id là giá trị id của người dùng hoặc bài đăng, và imageable_type là tên lớp của mô hình.

  • Chúng tôi sẽ xóa cột user_id khỏi bảng bài đăng mà chúng tôi đã tạo trước đó.
  • Nhìn vào các bảng cơ sở dữ liệu.

Dữ liệu có sẵn trong bảng bài đăng

Dữ liệu có sẵn trong bảng người dùng:

Dữ liệu có sẵn trong bảng ảnh:

  • Mở tệp Mô hình ảnh.
  • Thêm mã sau vào tệp Mô hình người dùng.
  • Thêm mã sau vào tệp mô hình Đăng.
  • Bây giờ, chúng tôi sẽ tạo các tuyến đường cho cả người dùng và bài đăng.

Đầu ra

Nghịch đảo của mối quan hệ một-nhiều (đa hình)

Trong chủ đề này, chúng ta sẽ thực hiện phép toán nghịch đảo của mối quan hệ đa hình một – nhiều. Cho đến bây giờ, chúng tôi đã tìm thấy hình ảnh của người dùng và bài đăng, bây giờ chúng tôi tìm ra chủ nhân của hình ảnh.

Chúng ta hãy hiểu thông qua một ví dụ.

Chúng ta cần tạo đường dẫn trong tệp web.php.

Trong đoạn mã trên, phương thức Photo :: findOrFail ($ id) xác định xem ảnh của một id đã cho có tồn tại hay không. Nếu tồn tại, thì nó sẽ trả về các chi tiết của hình ảnh thông qua câu lệnh, ‘$ photo->imageable’.

Đầu ra

Kết quả trên hiển thị các chi tiết của hình ảnh.

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

Trong mối quan hệ đa hình nhiều đến nhiều, một mô hình đích bao gồm các bản ghi duy nhất được chia sẻ giữa các mô hình khác nhau. Ví dụ: bảng thẻ chia sẻ mối quan hệ đa hình giữa video và bảng bài đăng. Bảng thẻ bao gồm danh sách thẻ duy nhất được chia sẻ bởi cả bảng, video và bảng bài đăng.

Chúng ta hãy hiểu thông qua một ví dụ.

  • Đầu tiên, chúng tôi tạo các mô hình với sự di chuyển cơ sở dữ liệu có tên là Âm thanh, Thẻ và Có thể gắn thẻ.
  • Sau khi tạo các mô hình, chúng tôi sẽ chỉnh sửa các tệp đã di chuyển của chúng.

Mở tệp di chuyển của bảng Âm thanh có tên là ‘create_audio_table’.

Trong đoạn mã trên, chúng ta đã tạo cột tên trong bảng âm thanh bằng cách sử dụng lệnh $ table-> string (‘name’) ;.

Mở tệp di chuyển của mô hình Thẻ có tên là ‘create_tag_table’.

Trong đoạn mã trên, chúng ta đã tạo cột tên trong bảng thẻ bằng cách sử dụng lệnh $ table-> string (‘name’) ;.

Mở tệp di chuyển của mô hình Có thể gắn thẻ có tên là ‘create_taggables_table’.

Trong đoạn mã trên, chúng tôi đã thêm ba cột mới trong bảng taggable, tức là tag_id, taggable_id và taggable_type. Tag_id đại diện cho id của bảng thẻ, id có thể gắn thẻ đại diện cho id của bảng mô hình và loại có thể gắn thẻ đại diện cho tên của lớp.

  • Để di chuyển các thay đổi ở trên, chúng tôi sử dụng lệnh dưới đây:

php artisan migrate

  • Nhìn vào bảng cơ sở dữ liệu:

Dữ liệu có sẵn trong bảng âm thanh:

Dữ liệu có sẵn trong bảng bài viết:

Dữ liệu có sẵn trong bảng thẻ:

Dữ liệu có sẵn trong bảng taggables:

  • Bây giờ chúng ta xác định mối quan hệ trên mô hình.

Audio.php

Post.php

  • Bây giờ chúng ta xác định tuyến đường.

Đầu ra

Khi truy cập vào tuyến của bài đăng, kết quả đầu ra sẽ là:

Khi truy cập vào tuyến của âm thanh, đầu ra sẽ là:

Nghịch đảo của mối quan hệ nhiều-nhiều (đa hình)

Trong mối quan hệ đa hình từ nhiều đến nhiều, chúng tôi tìm thấy các thẻ thuộc về mô hình bài đăng và âm thanh. Tuy nhiên, trong mối quan hệ nghịch đảo của nhiều-nhiều (đa hình), chúng ta sẽ tìm ra tất cả các bài đăng và âm thanh thuộc về một thẻ cụ thể.

Chúng ta hãy hiểu thông qua một ví dụ.

  • Đầu tiên, chúng tôi xác định phương thức trong mô hình Thẻ.

Tag.php

Trong đoạn mã trên, chúng tôi xác định hai phương thức, posts () và audios (). Trong phương thức posts (), chúng tôi đang truy xuất tất cả các bài đăng thuộc một thẻ được chỉ định. Trong phương thức audios (), chúng tôi đang truy xuất tất cả các âm thanh thuộc một thẻ được chỉ định.

  • Bây giờ, chúng tôi xác định tuyến đường.

Đầu ra

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now