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。 并且确保重启你的开发服务器
我有多对多关系。产品、类别和 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。 并且确保重启你的开发服务器