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/