2016-09-22 12 views
9

laravel 5.3 withCount() iç içe ilişki

Eğitimi şöyle model yapısı - biz Eğitimi Modeli videoları (video_count) sayısını yükleyebilir nasıl> (hasMany) video

-> (hasMany) Bölümler laravel 5.3 en withCount() metodu

ile denedim:

Tutorial::withCount('chapters') 
->withCount('chapters.videos') // this gives error: Call to undefined method Illuminate\Database\Query\Builder::chapters.videos() 
->all(); 

Edit

Bu eser, Daha İyi bir çözüm mü?

Tutorial::withCount('chapters') 
->with(['chapters' => function($query){ 
    $query->withCount('videos'); 
}]) 
->all(); 
+0

Eğer modellerinde ilişki tanımlamak mı? –

+0

Sadece bir -> withCount ('chapters.videos') yapmalısınız. Ayrıca, ilişkilerin doğru şekilde ayarlandığından emin olun. –

+0

@DigitalFire İlişkiler, onları hevesli yükleme ile yükleyebildiğim kadar doğru. sadece saymaCount() yöntemi – crazy1337

cevap

14

Sadece modelin tanımlanmış bir ilişkiye bir withCount() yapabilirsiniz. Bununla birlikte, bir ilişkiniz sonra ne elde edeceğinize göre hasManyThrough olabilir.

class Tutorial extends Model 
{ 
    function chapters() 
    { 
     return $this->hasMany('App\Chapter'); 
    } 

    function videos() 
    { 
     return $this->hasManyThrough('App\Video', 'App\Chapter'); 
    } 
} 

Ve sonra yapabilirsiniz:

Tutorial::withCount(['chapters', 'videos'])

Dokümanlar:

+0

Çok teşekkür ederim! Bunun gibi daha kolay olduğunu düşünmüyorum. – july77

+0

Yanıt için teşekkürler. Kesinlikle performansımı artırdım. –

İlgili konular