Laravel Eloquent in many to many relation limit 关系数据

Laravel Eloquent in many to many relation limit relational data

我有多对多关系。产品、类别和 category_product 作为枢轴。我想通过类别获取产品,但我需要每个类别 10 产品。

这是我的查询

 Category::with(['grocery_product')->get();

类别模型:

   public function grocery_product(): BelongsToMany
   {
       return $this->belongsToMany(Product::class)->limit(10);
   }

但这里的限制不起作用。如果我删除 limit(10),那么我将获得与该类别关联的所有产品。

注意:我也尝试过使用 take(10) 函数。

如何获取每个类别的 10 个产品?

默认情况下 laravel 没有针对该场景的任何现成解决方案。

所以你可以使用 eloquent-eager-limit by staudenmeir

你可以这样做。

//Category Model
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
  public function grocery_product(): BelongsToMany
{
    return $this->belongsToMany(Product::class);
}

内部 Product 模型使用相同的特征

//Product Model
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;

在控制器中。

//to get latest 5 `grocery_product` on each category
$fiveGroceryOfEachProduct = Category::with(['grocery_product' => function ($query) {
    $query->latest()->limit(5);
}])->get();

不使用此包调用限制方法将对整个查询应用limti。并非每个型号都有。

您可以查看github问题here

编辑查询兼容性问题

作为包装 suggests。请设置

'strict' => false, 

在您的 config/database.php 文件中,为 MariaDB/MySql 连接设置 'strict' => false。 并且确保重启你的开发服务器