Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Morphtomany는 데이터베이스 구조 측면에서 Morphedbymany와 어떻게 다른가?


Morphtomany는 데이터베이스 구조 측면에서 Morphedbymany와 어떻게 다른가?


Laravel polymorphic 다수의 관계에서 'morphtomany'와 'morphedbymany'의 차이는 주로 관계에서 그들의 역할과 데이터베이스 구조가이를 지원하는 방법에 있습니다.
다형성 다수의

데이터베이스 구조

다형성 다중 관계에는 세 가지 주요 테이블이 포함됩니다.

- 두 개의 모델 테이블 (예 :`Posts` 및`Tags ')
- 하나의 중간 피벗 테이블 (예 :`Taggables ')

피벗 테이블에는 최소 3 개의 열이 포함되어 있습니다.

-`tag_id` (관련 모델의 ID, 예 : tag)
-`taggable_id` (태그와 관련된 모델의 ID, 예 : 게시물 또는 비디오)
-`taggable_type` (관련 모델의 클래스 이름 또는 유형, 예를 들어,`app \ models \ post` 또는`app \ models \ video`)

이 구조를 통해 단일 피벗 테이블은 각 모델 조합에 대해 별도의 피벗 테이블이 필요없이 여러 다른 모델을 공통 모델 (이 경우 태그)과 관련시킬 수 있습니다 [5] [9].

###`morphtomany`의 역할

- 다형성 관계를 "소유"또는 "소유하는"모델에 사용됩니다.
- 다른 많은 모델과 관련된 모델의 관점에서 관계를 정의합니다.
- 예를 들어,`post` 모델에서`tags ()`메소드는`morphtomany`를 사용하여 해당 게시물과 관련된 모든 태그를 가져옵니다.
-이 메소드는 관련 모델과 "모프 이름"(예 :` 'taggable' ')을 지정하며, 이는 피벗 테이블 열 (`taggable_id` 및`taggable_type`)에 해당합니다.
- 현재 모델의 ID에 의해 피벗 테이블 필터링을 쿼리하고 관련 모델을 찾도록 유형을 입력합니다 [5] [9].

###`morphedbymany`의 역할

- 다형성 관계의 대상 인 모델에 사용됩니다.
-다형성 다중 관계의 역면을 정의합니다.
- 예를 들어,`tag '모델에서`posts ()`또는`videos ()``morphedbymany'를 사용하여 해당 태그와 관련된 모든 게시물이나 비디오를 가져옵니다.
- 관련 모델 클래스와`morphtomany`에 사용 된 동일한 모프 이름을 지정합니다.
-이 메소드는 관련 모델 유형 및 ID에 의해 피벗 테이블 필터링을 쿼리하여 현재 모델 (TAG) [5] [9]와 관련된 해당 유형의 모든 모델을 찾습니다.

데이터베이스 용어의 차이 요약

-`morphtomany`는 다른 많은 다른 사람들과 관련된 모델에서 호출되며, Pivot 테이블 열`taggable_id` 및`taggable_type`를 사용하여`taggable_type`가 현재 모델의 클래스와 일치하는 레코드를 필터링합니다.
-`morphedbymany`는 (역)와 관련된 모델에서 호출되며 피벗 테이블을 사용하여 현재 모델과 관련된 특정 유형의 모든 모델을 찾습니다.

두 방법 모두 동일한 피벗 테이블을 사용하지만 그들이 나타내는 관계의 방향이 다릅니다. 피벗 테이블은 관련 모델의 ID 및 유형에 대한 열을 사용하여 동일하게 유지되므로 여러 모델 유형이 단일 테이블을 통해 다형성으로 연결될 수 있습니다.

본질적으로, 'Morphtomany'는 "부모"또는 "소유"모델 측면의 관계를 정의하는 반면, Morphedbymany '는 "관련"모델 측에서 역 관계를 정의하며, 둘 다 동일한 다형성 피벗 테이블 구조 [5] [9] [1].

인용 :
[1] https://laracasts.com/discuss/channels/laravel/difference-sween-standard-polymorphic-many-to-many-polymorphic
[2] https://www.sitepoint.com/eloquents-polymorphic-relationships-emplained/
[3] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all-records
[4] https://laracasts.com/discuss/channels/eloquent/polymorphic-many-to-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/development/simplifying-many-to-many-relationships-with-laravel-polymorphic-Relations
[8] https://stackoverflow.com/questions/68073778/laravel-polymorphic-many-to-many-relation-pivot-with-relationship to-A
[9] https://blog.logrocket.com/polymorphic-relationships-laravel/