2017-10-16 67 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