2016-07-02 12 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

てみました。: パブリック関数の内容(){ リターンの$ this - > hasManyの( 'アプリケーション\モデル\コンテンツ'); } – Trick

+0

はい私は1つのタイプのコンテンツしか持っていなかった場合、現在私のコンテンツタイプはページと投稿です。これらはそれぞれモデル値Socms \ Content \ PageとSocms \ Content \ Postでコンテンツテーブルに表示されます。 - > http://i.imgur.com/ByE2pT5.png –

+0

この 'return $ this-> hasMany(self :: $ modelClass);'パラメータを静的にしてみてください! '$ modelClass'をセットすることを忘れないでください! –

答えて

0

(一時的/恒久的な解決策は、私が思いついた) 私は関係を削除し、これでそれを置き換えるを。あなたはすなわち、FQNを使用して

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-> contentはforeign_typeを指定したくないforeign_typeを返そうとします。 foreign_idを指定することなく、クラスに属するすべての行を返すようにします。 –

+0

一時的な解決策で自分の質問を編集しました –

+1

誤解をおかけして申し訳ありません。私はあなたのソリューションはかなり私にはまともだと思う。 –