Laravel Eloquent,添加有限行的关系结果为空

Laravel Eloquent, adding relation with limited rows turns up empty

我正在使用 Spatie Querybuilder (v1.11) return 过滤和分页结果。这反过来又在使用 Laravel Eloquent。查询 return 是一些具有相关媒体项的相册,我想限制每个相册的媒体项数量。相反,“媒体”属性 return 是空的。

 public function index(Request $request)
    {   
        
        $query = QueryBuilder::for(Album::class)
                ->with(['media' => function($query) {
                    $query->limit(4);
                }])
                ->get(); 
        return $query;

记录查询看起来不错:

 "query": "select * from `media` where `media`.`model_id` in (1, 2, 3, 4, 5,
           6, 7, 8, 9)           //<-- and so on, continues to 227 
  limit 4"

但结果是一个空的“媒体”:

"data": [
        {
            "id": 227,
            "name": "Good",
            "media": []

如果我不使用“限制”规范而只使用 ->with('media'),我会得到所有图像,但每个媒体我只想要 4 张。

更新

该问题与 Spatie Querybuilder 无关。我错了,媒体是空的,实际上第一行有 4 个媒体项目,但由于结果按降序显示,我认为所有相册都有空项目。 所以问题是查询将完整结果的项目数限制为 4,而不是每个专辑。 不过我找到了解决方案(见下文)。

因为我需要每张专辑获取 4 个项目,所以我首先查询获取专辑:

$query = QueryBuilder::for(Album::class)
                ->allowedSorts('created_at')
                ->has('media');                      //<-- only albums that has media 

$result = $query->paginate()->toArray(); 

然后我循环结果并得到相关的项目(每个 4 个)并将其作为 属性 附加到结果:

//Loop the albums and for each album add 4 of its related media

        foreach($result['data'] as &$album) {

            $mediaItems = Media::where('model_id', $album['id'])
                    ->limit(4)
                    ->get();
            $album['media'] = $mediaItems;           // <------

        }
        return $result;