Laravel Eloquent limit results for relationship(Laravel Eloquent 关系的限制结果)
问题描述
我有一个简单的相册和图片设置,每个相册都有很多图片.我可以正常获取所有数据,但我想将返回的图像数量限制为 3.我尝试过像这样传递闭包:
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();
这确实将图像数量限制为 3,但将图像总数限制为 3,但我想将每个相册限制为 3 个图像.所以第一个相册会按预期显示 3 张图片,但所有其他相册都没有图片.
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('AppImage')->limit(3);
}
我在控制器中调用它:
Album::with('limitImages')->get();
但这根本不限制返回的图像数量
But this doesn't limit the image count returned at all
推荐答案
我觉得你会很快遇到 N+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;
});
这篇关于Laravel Eloquent 关系的限制结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Laravel Eloquent 关系的限制结果
基础教程推荐
- PHP 守护进程/worker 环境 2022-01-01
- Doctrine 2 - 在多对多关系中记录更改 2022-01-01
- 使用 PDO 转义列名 2021-01-01
- 在 yii2 中迁移时出现异常“找不到驱动程序" 2022-01-01
- 如何在 Symfony 和 Doctrine 中实现多对多和一对多? 2022-01-01
- HTTP 与 FTP 上传 2021-01-01
- phpmyadmin 错误“#1062 - 密钥 1 的重复条目‘1’" 2022-01-01
- 如何在 XAMPP 上启用 mysqli? 2021-01-01
- 在 CakePHP 2.0 中使用 Html Helper 时未定义的变量 2021-01-01
- 找不到类“AppHttpControllersDB",我也无法使用新模型 2022-01-01