2016-07-02 4 views
3

동적 인 콘텐츠 모델에 대한 관계가 있습니다. 내 게시물 유형으로 콘텐츠 모델을 사용하고 있으며 데이터베이스의 각 모델은 나중에 콘텐츠 유형의 실제 콘텐츠 인 모델로 리디렉션되는 모델 값을가집니다.이 모델 값은 나중에 작성자 패키지를 사용하여 설치할 수 있습니다.Laravel : 모델의 동적 관계

public function contents() { 
     return $this->hasMany($this->model); 
    } 

내가보기에이 관계를 사용할 때 작동

$type->contents 

하지만 난 내 컨트롤러에서이 관계를 eagerload 할 때

$types = Content::with('contents')->get(); 

나는 아직이다

FatalThrowableError in Model.php line 844: Class name must be a valid object or a string 

이 작동하지 않는 이유를 파악하거나 내가 같은 일을 달성 할 수있는 방법을 대안으로 생각하는 오류를 얻을. 이것이 명확하지 않은 경우 자세한 내용을 제공 할 수 있습니다. 미리 감사드립니다!

업데이트 (일시적인/영구적 인 해결책을 찾았습니다.) 관계를 제거하고 이것을 바꿨습니다.

public function getContentsAttribute() { 
     $items = $this->contents_type::with('user')->get(); 
     return $items; 
    } 
+0

당신이 FQN, 즉를 : 공공 기능의 내용()를 사용하여 시도 했 { 반환 $ this-> hasMany의 ('앱 \ 모델 \ 컨텐츠'); } – Trick

+0

예 한 가지 유형의 콘텐츠 만있는 경우 작동합니다. 현재 내 콘텐츠 유형은 페이지 및 게시물입니다. 각각 Socms \ Content \ Page 및 Socms \ Content \ Post와 같은 모델 값으로 내용 테이블에 나타납니다. -> http://i.imgur.com/ByE2pT5.png –

+0

이'return $ this-> hasMany (self :: $ modelClass);'매개 변수를 정적으로 만드십시오. '$ modelClass'를 설정하는 것을 잊지 마십시오! –

답변

0

(일시적/영구적 인 해결책은 내가 함께했다) 내가 관계를 제거하고이 그것을 대체를;

public function getContentsAttribute() { 
     $items = $this->contents_type::with('user')->get(); 
     return $items; 
    } 
0

내가 제대로 질문을 이해한다면, 당신의 contents 표는 다형성이며 이미하지 않는 경우, (content_idcontent_type로 대체 할 수있다) 모두 foreign_idforeign_type이 있어야합니다. 그런 다음 컨텐츠 모델에 다음과 같은 코드가 있어야합니다

public function contents() 
{ 
    return $this->morphTo(); 
} 
+0

안녕하세요, 귀하의 답변 주셔서 감사합니다, 나는 이것을 시도했습니다. 이것은 정확히 $ type-> 내용이 foreign_type을 지정하려고하지 않는 foreign_type을 반환하려고 시도 할 때 찾고있는 것과 다릅니다. foreign_id를 지정하지 않고도 클래스에 속한 모든 행을 반환하기를 원합니다. –

+0

임시 해결책으로 내 질문을 편집했습니다. –

+1

오해해서 죄송합니다. 나는 네 솔루션이 나에게 꽤 괜찮은 것 같아. –