Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Morphtomany khác với MorphedbyMany như thế nào về cấu trúc cơ sở dữ liệu


Morphtomany khác với MorphedbyMany như thế nào về cấu trúc cơ sở dữ liệu


Sự khác biệt giữa `morphtomany` và` morphedbymany` trong các mối quan hệ đa hình đa hình của Laravel nằm chủ yếu trong vai trò của họ trong mối quan hệ và cách cấu trúc cơ sở dữ liệu hỗ trợ họ.

Cấu trúc cơ sở dữ liệu trong đa hình nhiều-đến nhiều

Các mối quan hệ nhiều-đến nhiều hình dạng liên quan đến ba bảng chính:

- Hai bảng mô hình (ví dụ: `post` và` tags`)
- Một bảng trục trung gian (ví dụ: `taggables`)

Bảng trục chứa ít nhất ba cột:

- `TAG_ID` (ID của mô hình liên quan, ví dụ: TAG)
- `taggable_id` (ID của mô hình có liên quan đến thẻ, ví dụ: bài đăng hoặc video)
- `taggable_type` (tên lớp hoặc loại của mô hình liên quan, ví dụ:` app \ model \ post` hoặc `app \ model \ video`)

Cấu trúc này cho phép một bảng trục duy nhất liên kết nhiều mô hình khác nhau với một mô hình chung (thẻ trong trường hợp này) mà không cần bảng trục riêng cho mỗi kết hợp mô hình [5] [9].

Vai trò của `morphtomany`

- Được sử dụng trên mô hình "sở hữu" hoặc "có" mối quan hệ đa hình.
- Xác định mối quan hệ từ quan điểm của mô hình có liên quan đến nhiều mô hình khác.
- Ví dụ: trong mô hình `post`, phương thức` tags () `sử dụng` morphtomany` để có được tất cả các thẻ được liên kết với bài đăng đó.
- Phương thức này chỉ định mô hình liên quan và "tên hình thái" (ví dụ: `'taggable'`), tương ứng với các cột bảng trục (` taggable_id` và `taggable_type`).
- Nó truy vấn bộ lọc bảng trục theo ID và loại mô hình hiện tại để tìm các mô hình liên quan [5] [9].

Vai trò của `morphedbymany`

- Được sử dụng trên mô hình là mục tiêu của mối quan hệ đa hình.
-Xác định mặt nghịch đảo của mối quan hệ nhiều đến đa hình.
- Ví dụ: trong mô hình `tag`, các phương thức như` post () `hoặc` video () `sử dụng` morphedbymany` để có được tất cả các bài đăng hoặc video được liên kết với thẻ đó.
- Nó chỉ định lớp mô hình liên quan và cùng tên hình thái được sử dụng trong `morphtomany`.
- Phương pháp này truy vấn bộ lọc bảng trục theo loại và ID của mô hình liên quan để tìm tất cả các mô hình thuộc loại đó được liên kết với mô hình hiện tại (TAG) [5] [9].

Tóm tắt sự khác biệt trong các điều khoản cơ sở dữ liệu

- `morphtomany` được gọi trên mô hình có liên quan đến nhiều loại khác và nó sử dụng các cột bảng pivot` taggable_id` và `taggable_type` để lọc các bản ghi trong đó` taggable_type` phù hợp với lớp mô hình hiện tại.
- `Morphedbymany` được gọi trên mô hình có liên quan đến (nghịch đảo) và nó sử dụng bảng trục để tìm tất cả các mô hình thuộc một loại cụ thể liên quan trở lại mô hình hiện tại.

Cả hai phương pháp đều sử dụng cùng một bảng trục nhưng khác nhau theo hướng của mối quan hệ mà chúng đại diện. Bảng trục vẫn giữ nguyên, với các cột cho ID và loại mô hình liên quan, cho phép nhiều loại mô hình được liên kết một cách đa hình thông qua một bảng.

Về bản chất, `morphtomany` định nghĩa mối quan hệ từ phía mô hình" cha mẹ "hoặc" sở hữu ", trong khi` morphedbymany` định nghĩa mối quan hệ nghịch đảo từ phía mô hình "liên quan", cả hai đều dựa vào cùng một cấu trúc bảng pivot đa hình [5] [9] [1].

Trích dẫn:
[1] https://laracasts.com/discuss/channels/laravel/difference-between-standard-polymorphic-many-to-many-polymorphic
.
[3] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all-related-records
[4] https://laracasts.com/discuss/channels/eloquent/polymorphic-many-to-many-relation-to-multiple-models
[5] https://laravel.com/docs/11.x/eloquent-relationships
[6] https://docs.octobercms.com/3.x/extend/database/relations.html
[7] https://simple-code.agency /blog
[8] https://stackoverflow.com/questions/68073778/laravel-polymorphic-many-to-many-relationship-pivot-table-with-relationship-to-a
.