有三种型号User
Post
和Image
。用户有很多帖子,帖子有很多图片。此外,还有一个user_images
函数CCD_ 5函数。所有关系都很好。在搜索过程中,我想让用户获得图像(每个用户最多3张(,并做一些类似的事情:
$users = User::where('is_active', true)
->with([
'user_images' => function ($relation) {
$relation->limit(self::LIMIT_IMAGES);
}
])->get();
响应:
[
{
"id": 265,
"user_images": [
{
"id": 309,
"path": "url"
},
{
"id": 308,
"path": "url"
},
{
"id": 306,
"path": "url"
}
]
},
{
"id": 305,
"user_images": []
}
]
正如你所能,我只有3个图像适用于所有用户,而不是每个用户。但是,如果我使用相同限制的Lazy Eager Loading(函数加载(,一切都很好。有人能解释这种行为吗?
我建议使用雄辩的热切极限包
安装后:
composer require staudenmeir/eloquent-eager-limit:"^1.0"
你只需要在模型中使用它,你想使用有限的热切加载:
class User extends Authenticatable
{
use StaudenmeirEloquentEagerLimitHasEagerLimit;
// ....
}
class UserImage extends Model
{
use StaudenmeirEloquentEagerLimitHasEagerLimit;
// ....
}
现在,您有限的热切加载将被正确提取。