问题
I have a simple set-up of Albums and Images, each album has many images. I can get all the data fine but I want to limit the returned number of images to 3. I have tried passing a closure like so:
Album::with(['images' => function($query) { $query->take(3);}])->get();
This does limit the number of images to 3 but it limits the total count of images to 3 but I want to limit each album to 3 images. So the first album will show 3 images as expected but all the other albums have no images.
I have tried adding a new method to my model like so:
public function limitImages()
{
return $this->hasMany('App\Image')->limit(3);
}
And I call this in my controller:
Album::with('limitImages')->get();
But this doesn't limit the image count returned at all
回答1:
I feel you'd quickly run into an N+1 issue trying to accomplish this. Just do it in the collection that it returns:
Album::with('images')->get()->map(function($album) {
$album->setRelation('images', $album->images->take(3));
return $album;
});
回答2:
If found this: https://github.com/staudenmeir/eloquent-eager-limit To fix native behavior
来源:https://stackoverflow.com/questions/43097559/laravel-eloquent-limit-results-for-relationship