首页 > 解决方案 > 最佳实践标准 - Laravel Eloquent/Model 的 SQL 查询

问题描述

我有以下执行良好的 SQL 查询。

SELECT *, (((product_price - product_sell_price) / product_sell_price)*100) as p_discount
FROM `products`
WHERE product_price IS NOT NULL
  AND (((product_price - product_sell_price) / product_sell_price)*100) > 25
ORDER BY p_discount DESC

我想在 LARAVEL 最佳实践标准中获得相同的结果。

Controller: ProductController
Model: Product

到目前为止我尝试的是:

$discount_range = Config::get('constants.discount_range')[$type];
$products       = Product::whereRaw('product_price IS NOT NULL AND (((product_price - product_sell_price) / product_sell_price)*100) BETWEEN '.$discount_range[0].' AND '.$discount_range[1])->orderBy("product_sell_price", $sort_by)->paginate($perpage);

有什么办法我可以做比这更有用的事情。我不想使用 WhereRaw()。

请帮助我改进。谢谢 :)

标签: laravellaravel-8

解决方案


使用 Illuminate\Support\Facades\DB;使用型号\产品;

Product::select('*', DB::raw('((product_price - product_sell_price) / product_sell_price)*100 as p_discount') ->where('p_discount', '>', 25) ->whereNotNull('product_price ') ->orderBy('p_discount', 'desc') )->get();


推荐阅读