2013-12-17 3 views
1

의 hasMany의 많은 항목이 수 설정 모델이Laravel 관계 : 다른 클래스

  • Laravel 4.1에서 다음과 같은 시나리오를 생각해보십시오 (우선으로 분류되어 있지만, 지금은 제쳐 놓을 수)
  • 이러한 항목의 각각 다른 "종류"나는 다음을 달성하고자하는 이상적

(... 열쇠, 지갑, CIGS가 들어있는 가방 (설정) 생각)이 될 수 있습니다

  • 이 설정과 항목 사이의 단순화, 열망 -로드 가능한 관계가
  • DRY 항목 모델을 유지 (아래 더 나은 설명)이
(이상적으로 각 항목은 기본 상용구 코드와 추상 클래스를 확장)

더 나은 내가 생각하고있는 것을 설명하기 :

class Set extends Eloquent { 
    // ... 
    public function items() { 
     // provides a "transparent" method to access ALL of its items ... no matter what class 
    } 
} 

class SubItemOne extends Item { // ... } 
class SubItemTwo extends Item { // ... } 

abstract class Item extends Eloquent { 
    public function set() { 
     return $this->belongsTo('Set'); 
    } 
} 
,536,

핵심에서 각 하위 클래스는 다른 것들과 공통적으로 공유하기 때문에 (생각하면 : 그들은 모두 세트에서 돌아 다니거나 이미지 등을 첨부 할 수 있습니다.) 추상 항목 클래스 내에서 정의 됨).

는 기본적으로, 나는

Set::with('items')->find(1); 

같은 상황에서 내 설정에 속하는 모든 항목에 액세스 할 수 있기를 원하지만 나는 관계의 종류가 '반대'를 위해 사용하는 것에 대해 정말 확실 해요.

상황은 내가 지금까지 고려했습니다

  • 은 서브 클래 싱 된 모델을 꺼내 단지 유형을 식별하기 위해 "item_kind"플래그를 사용하여 하나 개의 항목 모델을 유지한다. 각 항목은이 깃발을 기반으로 다른 클래스와의 관계를 정의합니다. (이미 나에게 소리 친다.)
  • 다형성 관계 (L 4.1에 도입 된 새로운 N-2-N 포함) 이 특정 시나리오에 대해 실제로 생각되는 것처럼 보입니다 : 특히 N2N은 하나의 간단한 관계를 통해 모든 항목에 액세스하는 문제를 해결하지 못합니다.
  • eager-loadable 관계를 파기하고 사용자 정의 "get_items()"메소드를 작성합니다. (-> subitemones(), -> subitemtwos() 등)과 같은 개별 관계에 액세스 할 수 있지만이 문제를 해결하는 다소 바보 같은 방법으로 보인다. (나는 쿼리 빌더 내에서 관계에 액세스 할 수 있기를 정말로 원한다)

나는 다소 여기에 갇혀 있지만 나는이 상황에 직면 한 유일한 사람이라는 것을 믿을 수 없다 ... 나는 "모범 사례"를 제안하기를 정말로 바라고있다!

답변

0

클래스 계층을 DB 계층으로 매핑 할 때 수락 할 수 있습니다. DB 스키마에서 상속을 나타내는 많은 방법이 있습니다.

이 시나리오는 다음과 같은 테이블이있을 수 있습니다 고려 :

  • 설정 :이 개체는 부모 클래스와 저장합니다 설정 항목 (예를 들어, 위치 등)
  • SubItemOne의 모든 일반적인 정보를 매핑 : 확장을 " set "엔티티를 지정하고이 유형과 관련된 추가 정보 만 저장합니다. 설정 엔티티 1의 관계 :
  • SubitemTwo는 ... 등

SubItemXXX 1 있습니다. 당신이 할 일은 간단는 SubItemXXX을 병합 조인 설정

당신은 더 읽을 수 있습니다 How can you represent inheritance in a database?