2016-03-11 16 views
9

In der Laravel-Dokumentation gibt es das folgende Beispiel zum Abrufen von morphedByMany Relationen, bei denen es sich um viele-zu-viele-polymorphe Beziehungen handelt.Abrufen aller morphedByMany-Beziehungen in Laravel Eloquent

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'); 
    } 
} 

Wie würde ich eine Liste aller morphed Beziehungen in einer Abfrage/Sammlung, zum Beispiel, posts und videos, und dann, wenn ich später hinzugefügt photos (oder etwas), das auch?

+0

überhaupt eine Lösung finden? – robjbrain

+0

Ich habe, aber ich habe nicht den Code, es war in einem alten Job ... was ich tat, war im Grunde verwenden Sie den Abfrage-Generator, um die Ergebnisse zu erhalten und die Modelle mit den Daten in einer benutzerdefinierten Sammlung-Klasse zu konstruieren. –

Antwort

-2

sollten Sie in der Lage sein, eine Beziehung, die auf Ihrem Tag Klasse hinzuzufügen als solche

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

dass die taggable_id und taggable_type verwenden wird das entsprechende Modell zu erhalten, die es gebunden ist.

+1

Das ist für polymorphe Beziehungen, ich spreche speziell über MorphedByMany Beziehungen, die eine Viele-zu-viele polymorphe Beziehung ist. Ich werde die Frage aktualisieren, um das klarer zu machen. –

0

Haben Sie daran gedacht, die "Union" -Funktion der Sammlungen zu verwenden, um die gesamte Sammlung zusammenzuführen, um alle benötigten Daten abzurufen?

class Tag extends Model 
{ 
    [...] 

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

Dies würde nicht für die Instanz funktionieren, in der ich später mehr gemorphte Elemente hinzugefügt habe, obwohl dies für den speziellen Fall, in dem Videos und Posts abgerufen werden, funktionieren würde. –

+0

Wenn Sie neue morphable hinzufügen, können Sie eine -> union in diese Funktion einfügen. Natürlich ist das nicht vollautomatisch, aber irgendwie müssen Sie einige Codezeilen in Ihr Modell ändern ... –