在ManyToMany产品类别关系中通过急切加载仅获取X产品模型

时间:2016-01-28 09:42:41

标签: php mysql laravel

我在类别和产品模型之间存在ManyToMany关系。

产品模型是这样的:

class Product extends Model
    {
        protected $primaryKey = 'product_id';

        public function categories ()
        {
            return $this->belongsToMany('App\Category', 'category_product', 'product_id', 'cat_id');
        }
}

类别模型是:

class Category extends Model
        {
            protected $primaryKey = 'cat_id';

            public function products (){
            return $this->belongsToMany('App\Product','category_product','cat_id','product_id');
        }
    }

现在,我想只获取每个类别的最后4个(例如)产品。为此我写了这个:

$categories =   Category::with([
    'products'  =>  function($query){
        $query->select('products.product_id')->orderBy('created_at','desc')->take(4);
    }
])->get();

但这不能正常工作并返回意外的产品数量?

我该怎么做?

1 个答案:

答案 0 :(得分:0)

如果您想要每个类别的最后X个产品,您可以尝试以下方式:

Category::with(['products' => function($query) {
    $query->orderBy('updated_at','desc')->take(X);
}])->get();

这应返回一个类别集合,其中每个类别的产品数量不应超过所需数量。

希望它有所帮助。