gpt4 book ai didi

mysql - 来自 Laravel 5.5 中 HasManyThrough 的 ManyToMany 关系的 GroupBy 结果

转载 作者:行者123 更新时间:2023-11-29 10:07:52 25 4
gpt4 key购买 nike

我有一个复杂的关系,例如 CategoryProducts 之间的多对多关系,并且 Product 可以有多个 Inventory > 来自不同商店(用户)的列表。 商店可以有多个相同产品的列表作为变体(颜色/尺寸)。

到目前为止一切都很好!

当向访问者显示列表时,问题就开始了。我想显示某个类别下的所有列表,但不想显示同一商店中同一产品的多个列表。相反,您想从商店中选择最低的sale_price列表。

我有三个模型,关系如下:

     class Category extends Model
{
public function products()
{
return $this->belongsToMany(Product::class);
}
}


class Product extends Model
{

public function categories()
{
return $this->belongsToMany(Category::class);
}

public function inventories()
{
return $this->hasMany(Inventory::class);
}
}


class Inventory extends Model
{
public function product()
{
return $this->belongsTo(Product::class);
}

}

表格:

    //Categories
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
});


//Products
Schema::create('products', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
});

//Pivot table
Schema::create('category_product', function (Blueprint $table) {
$table->integer('category_id');
$table->integer('product_id');
});


//Inventories
Schema::create('inventories', function (Blueprint $table) {
$table->increments('id');
$table->integer('shop_id');
$table->integer('product_id');
$table->string('sku', 200);
$table->string('title');
$table->decimal('sale_price', 10, 2);
});

由于 Laravel 不提供任何 manyToManyThough() 关系。我在 Category 模型中添加了 listings 方法。此方法返回所有列表:

public function listings()
{
$product_ids = $this->products()->pluck('products.id')->all();

return Inventory::whereIn('product_id', $product_ids)->paginate(20);
}

然后我尝试了这个:

public function listings()
{
$product_ids = $this->products()->pluck('products.id')->all();

return Inventory::whereIn('product_id', $product_ids)->groupBy('shop_id','product_id')->paginate(20);
}

这些方法会产生 MySQL GroupBy 错误。是的,我可以在获取所有结果后过滤结果,但这会影响分页。如何获得排序结果并保持分页能力。谢谢,我对社区的感激之情一天比一天多。 :)

最佳答案

您可以通过“跳过”products 表来创建直接关系:

public function listings() {
return $this->belongsToMany(
Inventory::class,
'category_product',
null,
'product_id',
null,
'product_id'
);
}

关于mysql - 来自 Laravel 5.5 中 HasManyThrough 的 ManyToMany 关系的 GroupBy 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51544958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com