2017-10-16 63 views
2

我有2個系列。 車輛和景觀。 我想帶回按照視圖數排序的車輛列表。排序相關(hasMany)文件數

我的汽車類

class Vehicle extends Moloquent { 

    protected $dates = ['date_assigned']; 

    public function associated_views() 
    { 
     return $this->hasMany('App\Collections\View'); 
    } 

} 

我的視圖類

class View extends Moloquent { 

    public function associated_vehicle() 
    { 
     return $this->belongsTo('App\Collections\Vehicle'); 
    } 

} 

我能得到的事後的意見計數,用$媒介物> associated_views->計數(),但這不能讓我在將每一條記錄拉回前在場上進行排序。這可能嗎?

+0

看看這篇文章可以幫助你! https://stackoverflow.com/questions/18861186/eloquent-eager-load-order-by或https://stackoverflow.com/questions/25700529/laravel-eloquent-how-to-order-results-of-related-模型 – LorenzoBerti

+0

@洛倫佐Berti,是的,我已經閱讀了很多次,但我不知道我可以通過聚合(即計數)命令。我會嘗試一些更多的想法,但沒有得到它的工作呢... – JBxOnline

回答

0

使用withCount()

Vehicle::withCount('views')->latest('views_count')->get() 

如果你要計算從一個關係結果的數量,而無需實際加載它們,你可以使用withCount方法,這將放置{relation}_count列上你的最終模型

https://laravel.com/docs/5.5/eloquent-relationships#counting-related-models

+0

這_should_是完美的答案...但是,我得到一個錯誤,它看起來像它是laravel-mongodb中的錯誤:https: //github.com/jenssegers/laravel-mongodb/issues/1147 – JBxOnline

+0

@JBxOnline問題是你正在使用數據庫通過一個包(這總是一個壞主意)。因此,不需要使用Laravel功能,您需要詢問軟件包作者有關此方法的解決方法。 –

+0

我不同意使用軟件包總是一個壞主意。雄辯本質上是一個包裝。你還應該注意到,我用jenssegers-mongodb標記了我的問題,以明確我正在通過這個包使用Mongo數據庫。無論如何,withCount仍然可以工作,並且我已經向軟件包作者提出了這個問題。看到你的建議應該提供我所追求的功能,我已經把它標記爲最好的答案。我以前並不知道withCount()方法。 – JBxOnline