использовать внешние функции для вычисления значения в красноречивых запросах - PullRequest
0 голосов
/ 08 мая 2018

Я создал фильтр для товаров в laravel 5.5

Я хочу отфильтровать диапазон цен (мин: макс), но столбец цен в дБ - это не та цена, которую я использую для отображения на странице продукта.

У меня есть еще 2 столбца TVA, Прибыль и внешняя функция, которая рассчитывает цену для продажи.

Функция calcPrice принимает эти аргументы (цена, цена, прибыль)

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);

Есть ли способ подсчета окончательной цены в select в eloquent?

например: calcPrice (Цена, TVA, Прибыль) в качестве finalPrice, затем используйте поле finalPrice для сравнения между

UPDATE

с использованием

$products = DB::table('products')->select(DB::raw('products.*, (Price * ((TVA + Profit) / 100 + 1)) as salePrice'));

вместо

$products = Product::query(); 

я вижу значение salePrice в dd, но ..... при использовании для сравнения:

$products->whereBetween('salePrice', [$min, $max]);

говорит, что столбец salePrice не найден. Как я могу использовать этот псевдоним 'salePrice' в качестве столбца?

1 Ответ

0 голосов
/ 08 мая 2018

Используйте это:

$products->whereRaw('(Price * ((TVA + Profit) / 100 + 1)) >= ?', [$min])
    ->whereRaw('(Price * ((TVA + Profit) / 100 + 1)) <= ?',  [$max])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...