我已经为laravel 5.5
中的产品创建了一个过滤器我想过滤价格范围(最小值:最大值),但db中的价格列不是我用于在产品页面上显示的价格。
我还有2个专栏TVA,Profit和一个计算待售价格的外部功能。
calcPrice函数接受那些参数(price,tva,profit)
calcPrice($price, $tva = 0, $profit = 0)
在过滤器逻辑控制器中,我使用这种方法:
// Product model
$products = Product::query();
// use for appends with pagination
$queries = [];
// all the conditions for the query
$filterCondition = array(
['IsActive', '1'],
['CategoryID', $currentCategory->CategoryID]
);
// brand filter
if(request()->has('brand')){
$filterBrands = explode(":", request('brand'));
$products = $products->whereIn('BrandID', $filterBrands);
$queries['brand'] = request('brand');
}
...
// price filter
if(request()->has('price')){
$filterPrice = explode(":", request('price'));
$min = $filterPrice[0];
$max = $filterPrice[1];
$products = $products->whereBetween('Price', [$min, $max]);
$queries['price'] = request('price');
}
// the final query
$products = $products->where($filterCondition)->paginate(9)->appends($queries);
有没有办法在eloquent中选择最终价格?
ex:calcPrice(Price,TVA,Profit)作为finalPrice然后使用finalPrice字段进行比较
更新
使用
$products = DB::table('products')->select(DB::raw('products.*, (Price * ((TVA + Profit) / 100 + 1)) as salePrice'));
而不是
$products = Product::query();
我在dd中看到值salePrice,但是.....用于比较时:
$products->whereBetween('salePrice', [$min, $max])
;
说没有找到专栏销售价格。我如何使用' salePrice&allias作为专栏?
答案 0 :(得分:0)
使用此:
$products->whereRaw('(Price * ((TVA + Profit) / 100 + 1)) >= ?', [$min])
->whereRaw('(Price * ((TVA + Profit) / 100 + 1)) <= ?', [$max])