Laravel 热卖商品功能
Laravel top sale product function
我通过 order_details、
在产品和订单之间建立了多对多关系
如何获得前 5 名的促销产品?
产品:
public function orders()
{
return $this->belongsToMany(Order::class, 'order_details');
}
订单:
public function products()
{
return $this->belongsToMany(Product::class, 'order_details')->withPivot(['quantity', 'sale_price']);
}
枢轴table:
public function up()
{
Schema::create('order_details', function (Blueprint $table) {
$table->id();
$table->foreignId('order_id');
$table->foreign('order_id')
->on('orders')
->references('id')->onDelete('cascade');
$table->foreignId('product_id');
$table->foreign('product_id')
->on('products')
->references('id')->onDelete('cascade');
$table->integer('quantity');
$table->decimal('sale_price', 10, 4);
$table->timestamps();
});
}
也许这样的事情会奏效
$topfive = Order::with('products')->get()->sortBy(function($order) {
return $order->products->count();
})->take(5);
在这里你得到有任何产品的订单,从中收集,按每个订单的产品数量排序,并取前 5 名。我希望这就是你所说的“前 5 名”。如果不告诉我,我会修复查询。
编辑 1
因为你需要最常出现的产品,这里是反向查询
$topfive = Product::with('orders')->get()->sortBy(function($product) {
return $product->orders->count();
})->take(5);
我通过 order_details、
在产品和订单之间建立了多对多关系如何获得前 5 名的促销产品?
产品:
public function orders()
{
return $this->belongsToMany(Order::class, 'order_details');
}
订单:
public function products()
{
return $this->belongsToMany(Product::class, 'order_details')->withPivot(['quantity', 'sale_price']);
}
枢轴table:
public function up()
{
Schema::create('order_details', function (Blueprint $table) {
$table->id();
$table->foreignId('order_id');
$table->foreign('order_id')
->on('orders')
->references('id')->onDelete('cascade');
$table->foreignId('product_id');
$table->foreign('product_id')
->on('products')
->references('id')->onDelete('cascade');
$table->integer('quantity');
$table->decimal('sale_price', 10, 4);
$table->timestamps();
});
}
也许这样的事情会奏效
$topfive = Order::with('products')->get()->sortBy(function($order) {
return $order->products->count();
})->take(5);
在这里你得到有任何产品的订单,从中收集,按每个订单的产品数量排序,并取前 5 名。我希望这就是你所说的“前 5 名”。如果不告诉我,我会修复查询。
编辑 1
因为你需要最常出现的产品,这里是反向查询
$topfive = Product::with('orders')->get()->sortBy(function($product) {
return $product->orders->count();
})->take(5);