Laravel 5迭代和限制模型从关系返回


Laravel 5 Iterate and Limit models returned from Relationship

使用L5,我有一个"Car"模型和一个"Brand"模型。

在我的Brand模型中,我对Car有一个hasMany关系,所以我可以执行$brand->cars并获得数据库中该品牌的所有汽车。

这工作得很好,但我永远不需要返回所有的值,我将总是对它们进行过滤、限制或迭代。

在我的控制器中,我可以做$brand->cars->take(20),它正确地返回20个结果,但是检查mysql查询,我可以看到查询本身没有"限制",当你有数百万个可能的结果时,查询本身似乎相当密集。

是否有一种方法可以直接迭代和限制关系,或者我只是放弃关系,直接使用eloquent:

$brand::where('year','>',2010)->take(20)->get()?

它正在加载你正在寻找的内容。

Brand::with('cars')->take(20)->get();

如果您需要根据任何字段筛选汽车,例如'year':

Brand::whereHas('cars', function($q) use($year)
{
    $q->where('year', '>', $year);
})->with('cars')->take(20)->get();

是的,你可以这样做:

$brand->cars()->take(20)->get();