2013-05-31 6 views
5

저는 Laravel 및 Eloquent의 새로운 제품입니다. (일반적으로 ORM에 대한 경험이 거의 없습니다.)Eloquent/Laravel 3 자 다 대다 관계

  1. : I가 열이 하나 개의 접합 테이블을 모델로 한
  2. 사용자

  1. 위젯
  2. 작업 :

    의 내가 세 개의 데이터베이스 테이블이 있다고 가정 해 봅시다 widget_id

  3. action_id
  4. user_id
  5. 타임 스탬프

접합의 포인트는 상호 작용의 로그를 유지하는 것입니다 - 타임 스탬프에게 userwidgetaction 수행하는 모든 시간이 걸립니다. 나는 Eloquent를 사용하여 간단한 다 - 대 - 다 관계를 모델링하는 방법을 보았고이 작업은 정상적으로 수행되었지만보다 복잡한 3- 웨이 관계를 모델링하는 방법을 잘 모르겠습니다. I가, 웅변의 action_widget 테이블에 대한 명시 적 모델을 추가 할 수있는 방법 내가 (그래서 테이블이 action_widget라는이있을 것 widgetaction에 말) 단순히 대다 관계가 있었다하더라도 그 문제에 대한

, 각 관계 (예 : 타임 스탬프, 주석 필드 등)에 대한 추가 데이터를 추적하는 목적. 아니면 완전히 잘못된 방식으로이 문제를 해결할 것입니까?

ORM을 처음 사용하면서 나는 할 수있는 일에 대해 매우 감탄했습니다! 이 느낌이 사라 졌습니까? : p

답변

11

좋아요. Categoty < -> 기사와 같은 양방향 관계가있을 때 피벗이 잘 작동합니다. 하지만 3 방향 관계가 있다면 WidgetUserAction이라는 모델을 갖는 것이 더 좋습니다.

편집 :이 경우 새 "hasManyThrough"가 정상적으로 작동합니다.

+0

감사합니다. 맞춤 모델을 사용하는 것이 가장 좋은 해결책 인 것 같습니다. – Raolin

+3

당신은 이것에 대해 어떻게 생각하는지 조금 설명 할 수 있습니까? 나는 비슷한 문제에 직면하고있다. 그러나 필자는 그것을 따르기 위해 굳이 Eloquent에 대해 충분히 알지 못하며 문서는 충분하지 않다. 이 경우에는 – Mcg1978

+0

hasManyThrough가 작동하지 않습니다. hasManyThrough는 관계를 반환하지 않고 세 번째 특성의 값만 반환하기 때문에. – Mesuti

0

Laravel은 중간 모델을 자동으로 생성 할 수 있습니다. 그것들은 "피벗 테이블"이라고 불립니다.

this section in the documentation을 읽어 보시기 바랍니다.

+0

나는 이것을 가지고 놀았고, 나의 경우에 대해 밀라드의 대답을 더 좋아한다고 생각한다. 피벗 테이블 방법을 사용할 다른 이유가 있습니까? – Raolin

+0

사실, 아직 시도하지 않았습니다. 중간 테이블의 사용자 지정 모델은 좋은 생각처럼 들립니다. – Franz