使用外部函数计算雄辩查询中的值

时间:2018-05-08 09:01:07

标签: php laravel laravel-5 laravel-5.5

我已经为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作为专栏?

1 个答案:

答案 0 :(得分:0)

使用此:

$products->whereRaw('(Price * ((TVA + Profit) / 100 + 1)) >= ?', [$min])
    ->whereRaw('(Price * ((TVA + Profit) / 100 + 1)) <= ?',  [$max])