限制急切的负载/关系。从每个关系中获取三个项目

时间:2015-03-04 00:16:35

标签: php laravel laravel-4 laravel-5

假设一个类别有很多产品。

我希望加载所有产品类别,然后为每个类别加载三个产品。

在Laravel 5中如何实现这一目标?这似乎不可能。

换句话说,我希望限制一个急切的负担。

我试过这个:

        $categories = Category::with([
            'images',
            'products' => function($query) {
                $query->take(3); // THIS does NOT work...
            }
        ])->get();

它产生这个输出:

select * 
from `products` 
where `products`.`category_id` in ('1', '2', '3', '4', '5') limit 3

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我添加了一个扩展原始关系的关系。

public function products() {
    return $this->hasMany( 'Products' );
}

public function firstProducts() {
    return $this->products()->limit( 3 );
}

然后我可以打电话。

$categories = Category::with(['images','firstProducts'])->get();

可能还有其他方法可以实现这一目标。您可以查看范围,但为了快速解决方案,这可以修补。