2016-03-11 17 views
9

Nella documentazione di Laravel, c'è il seguente esempio per il recupero delle relazioni morphedByMany, che sono relazioni polimorfiche molte-a-molti.Recupero di tutte le relazioni morphedByMany 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'); 
    } 
} 

Come dovrei ottenere un elenco di tutti i morphed rapporti in una query/raccolta, per esempio, posts e videos, e poi se ho poi aggiunto photos (o nulla), anche questo?

+0

mai trovare una soluzione? – robjbrain

+0

Ho fatto ma non ho il codice, era in un vecchio lavoro ... quello che ho fatto è stato fondamentalmente utilizzare il generatore di query per ottenere i risultati e costruire i modelli con i dati in una classe di raccolta personalizzata. –

risposta

-2

Si dovrebbe essere in grado di aggiungere un rapporto sulla vostra classe Tag come tale

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

che utilizzerà il taggable_id e taggable_type per ottenere il relativo modello che è legato a.

+1

Questo vale per le relazioni polimorfiche, sto specificatamente parlando delle relazioni morphedByMany che è una relazione polimorfica molti-a-molti. Aggiornerò la domanda per renderla più chiara. –

0

Hai pensato di utilizzare la funzione "unione" delle collezioni per unire tutte le diverse raccolte al fine di recuperare tutto ciò di cui hai bisogno?

class Tag extends Model 
{ 
    [...] 

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

Questo non funzionerebbe per l'istanza in cui ho aggiunto più elementi trasformati in seguito, anche se per il caso specifico di ottenere video e post funzionerebbe. –

+0

Quando aggiungerai new morphable, puoi aggiungere un -> union in questa funzione. Ovviamente non è completamente automatico, ma in ogni caso devi modificare alcune linee di codice nel tuo modello ... –