2016-03-11 14 views
9

W dokumentacji Laravel znajduje się następujący przykład do uzyskiwania relacji morphedByMany, które są wielowymiarowymi relacjami wiele do wielu.Odzyskiwanie wszystkich relacji morphedByMany w Laravel Wymowne

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

Jak uzyskać listę wszystkich morphed relacji w jednym zapytaniu/kolekcji, na przykład, posts i videos, a następnie, jeśli później dodał photos (lub cokolwiek), że zbyt?

+0

Czy znajdziesz jakieś rozwiązanie? – robjbrain

+0

Zrobiłem, ale nie mam kodu, to było w starej pracy ... to, co zrobiłem, to w zasadzie użyć konstruktora zapytań, aby uzyskać wyniki i skonstruować modele z danymi w niestandardowej klasie kolekcji. –

Odpowiedz

-2

Powinieneś móc dodać relację na swojej klasie Tag jako taki

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

który będzie korzystał z taggable_id i taggable_type aby uzyskać odpowiedni model, który jest przywiązany do.

+1

To jest dla polimorficznych związków, konkretnie mówię o związkach morphedByMany, który jest polimorficzną relacją wiele do wielu. Zaktualizuję to pytanie, aby było jaśniejsze. –

0

Czy myślisz, że używasz funkcji "zjednoczenia" kolekcji, aby scalić całą kolekcję, aby odzyskać wszystko, czego potrzebujesz?

class Tag extends Model 
{ 
    [...] 

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

To nie zadziała w przypadku, gdy dodałem więcej zmutowanych elementów później, chociaż w konkretnym przypadku pobrania filmów i postów zadziała. –

+0

Po dodaniu nowego parametru morfable, możesz dodać -> union do tej funkcji. Oczywiście nie jest w pełni automatyczne, ale w każdym razie musisz zmienić kilka linii kodu w swoim modelu ... –

Powiązane problemy