Product => id, name, price
Discount => id, percent, date_start, date_end
discount_products (Table) => product_id, discount_id
Product::addSelect(['discount_price' => function ($query) {
$query->selectRaw('SUM(products.price * (100 - discounts.percent) / 100)')
->from('discounts')
->join('discount_products', 'discounts.id', '=', 'discount_products.discount_id')
->whereColumn('discount_products.product_id', 'products.id')
->where('date_start', '<=', Carbon::today()->toDateString())
->where('date_end', '>=', Carbon::today()->toDateString())
->groupBy('id')
->orderBy('id', 'desc')
->limit(1);
}])
// ->orderByRaw('COALESCE(discount_price, price) ASC') // not working
// ->orderByRaw('discount_price ASC') // working
// ->orderByRaw('price ASC') // working
->get();
朋友们,大家好,首先为我的英语道歉。我使用PostgreSQL作为我的数据库。
我想按价格订购产品。
如果产品有“价格”,请使用它或使用“discount_price”字段。请帮帮忙。
发布于 2020-07-30 05:09:07
Product::fromSub(function ($query) {
$query->from("products")
->addSelect(['discount_price' => function ($query) {
$query->selectRaw('SUM(products.price * (100 - discounts.percent) / 100)')
->from('discounts')
->join('discount_products', 'discounts.id', '=', 'discount_products.discount_id')
->whereColumn('discount_products.product_id', 'products.id')
->where('date_start', '<=', Carbon::today()->toDateString())
->where('date_end', '>=', Carbon::today()->toDateString())
->groupBy('id')
->orderBy('id', 'desc')
->limit(1);
}]);
}, 't')
->orderByRaw('COALESCE(discount_price, price) ASC')
->get();
https://stackoverflow.com/questions/63161632
复制相似问题