Я создал фильтр для товаров в 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' в качестве столбца?