使用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();