2016-03-11 32 views
9

Laravel belgelerinde, çoktan çoğuna polimorfik ilişkiler olan morphedByMany ilişkilerini almak için aşağıdaki örnek bulunmaktadır.Tüm morphedByMany ilişkilerini Laravel Eloquent uygulamasında alma

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

nasıl bir sorgu/koleksiyonundaki tüm morphed ilişkilerin bir listesini alacağı örneğin posts ve videos ve sonra daha sonra photos (ya da bir şey) eklenirse, bunu da?

+0

Hiç bir çözüm bulmak? – robjbrain

+0

Yaptım ama kodum yok, eski bir işteydi… yaptığım şey temel olarak sonuç almak ve sorguları özel bir koleksiyon sınıfındaki modeller ile oluşturmak için sorgu oluşturucuyu kullanmaktı. –

cevap

-2

Bunu bağlıdır ilgili Modeli almak için taggable_id ve taggable_type kullanacak böyle

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

olarak Etiket sınıfı bir ilişki eklemek gerekir.

+1

Bu polimorfik ilişkiler içindir, özellikle çoktan çoğa polimorfik bir ilişki olan morphedByMany ilişkileri hakkında konuşuyorum. Sorunu daha net hale getirmek için güncelleyeceğim. –

0

Tüm ihtiyacınız olan şeyleri almak için tüm farklı koleksiyonları birleştirmek için koleksiyonların "sendika" işlevini kullanmayı düşündünüz mü?

class Tag extends Model 
{ 
    [...] 

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

Bu, daha sonradan daha fazla morflu eleman eklediğim örnek için işe yaramazdı, ancak belirli videoları ve yayınları alması işe yarayacaktı. –

+0

Yeni morphable eklediğinizde, bu işleve bir -> birleşim ekleyebilirsiniz. Elbette tam otomatik değil ama yine de bazı kod satırlarını modelinize değiştirmeniz gerekiyor ... –