2016-03-11 14 views
9

Laravelのドキュメントでは、多対多の多様な関係であるmorphedByManyリレーションを取得するための次の例があります。Laravel Eloquent内のすべてのmorphedByMany関係を取得する

Laravel Many to Many polymorphic relations documentation

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Tag extends Model 
{ 
    /** 
    * Get all of the posts that are assigned this tag. 
    */ 
    public function posts() 
    { 
     return $this->morphedByMany('App\Post', 'taggable'); 
    } 

    /** 
    * Get all of the videos that are assigned this tag. 
    */ 
    public function videos() 
    { 
     return $this->morphedByMany('App\Video', 'taggable'); 
    } 
} 

は、どのように私は私が後でそれもphotos(か何か)を、追加した場合、その後postsvideos、例えば、1クエリ/コレクション内のすべてのmorphed関係のリストを取得し、でしょうか?

+0

エヴァー解決策を見つけますか? – robjbrain

+0

私はしましたが、私はコードを持っていませんでした。これは古い仕事でした...私がしたのは、基本的にクエリービルダーを使用して結果を取得し、カスタムコレクションクラスのデータでモデルを構築することでした。 –

答えて

-2

あなたはそれが結ばれ、関連するモデルを取得するためにtaggable_idとtaggable_typeを使用するよう

public function taggable() 
{ 
    return $this->morphedTo(); 
} 

としてあなたのタグのクラスの関係を追加することができるはずです。

+1

これは多相関係のためのものです。私は多対多多型関係であるmorphedByMany関係について具体的に話しています。私はそのことを明確にするために質問を更新します。 –

0

コレクションの「ユニオン」機能を使用して、必要なものすべてを取得するために異なるコレクションをすべてマージすると思いましたか?

class Tag extends Model 
{ 
    [...] 

    /** 
    * Get all of. 
    */ 
    public function morphed() 
    { 
     return $this->video->union($this->posts)->all(); 
    } 
} 
+0

これは後でモーフィングされた要素を追加したインスタンスでは機能しませんが、ビデオや投稿を取得する特定のケースでは機能します。 –

+0

新しいモーフィングを追加するときは、この関数に - >共用体を追加できます。もちろん、完全に自動ではありませんが、とにかくコードのいくつかの行をモデルに変更する必要があります... –

関連する問題