Laravel logical – конвертировать цену, поэтому на frontend у меня всегда значение chf

Это немного тяжело. У меня в моей cms четыре валюты, usd, gbp, euro и основной chf. Кроме того, в моем cms администратор может добавлять школы, внутри школ вы можете создавать курсы, а затем администратор может установить цену для конкретного курса в usd или в gbp, euro или chf. Какое у меня задание, если в школе есть несколько курсов, и эти курсы имеют разные значения, мне нужно поймать курс с минимальной ценой, поэтому я могу написать на своем внешнем интерфейсе: «Курсы начинаются с XX – CHF». В моем cms администратор может установить собственный обменный курс, CHF всегда установлен в 1, но они могут добавлять свои собственные значения для usd, gbp или euro.

То, что я сделал до сих пор, берет минимальное значение для этого курса и конвертирует его в CHF. И он работает нормально.

ПРОБЛЕМА: если один курс установлен на 10 евро, а другой установлен на 10 долларов США, я беру первое значение, поэтому он может рассчитать 10 евро в качестве минимальной цены, а 10 долларов – минимальная цена. Поэтому мне нужно как-то вычислить валюты внутри запроса и не иметь понятия, как это сделать.

Вот что я сделал до сих пор:

public function schoolMinPrice() { $minPrice = DB::table('schools') ->select('season_prices.currency', \DB::raw('MIN(season_prices.price) AS min')) ->join('courses', function ($query) { $query->on('courses.school_id', '=', 'schools.id'); $query->where('schools.id', '=', $this->id); }) ->join('seasons', 'seasons.course_id', '=', 'courses.id') ->join('season_prices', 'season_prices.season_id', '=', 'seasons.id') ->first(); $exchangeRate = DB::table('exchange_rates') ->select('dollar', 'euro', 'gbp')->get(); foreach ($exchangeRate as $rate) { if ($minPrice->currency == 'chf'){ return round($minPrice->min); } else if ($minPrice->currency == 'usd') { $calculated_rate = 1 / $rate->dollar; return round($minPrice->min * $calculated_rate); } else if ($minPrice->currency == 'eur') { $calculated_rate = 1 / $rate->euro; return round($minPrice->min * $calculated_rate); } else if ($minPrice->currency == 'gbp') { $calculated_rate = 1 / $rate->gbp; return round($minPrice->min * $calculated_rate); } } } 

Итак, в моем первом запросе я получаю самую низкую цену в базе данных:

 {#732 ▼ +"currency": "usd" +"min": "5.00" } 

И во втором запросе я получаю валюты из базы данных, установленной admin:

 array:1 [▼ 0 => {#844 ▼ +"dollar": "1.0000" +"euro": "2.0000" +"gbp": "3.0000" } ] 

И затем я делаю расчет для преобразования usd, gbp, euro в chf

  foreach ($exchangeRate as $rate) { if ($minPrice->currency == 'chf'){ return round($minPrice->min); } else if ($minPrice->currency == 'usd') { $calculated_rate = 1 / $rate->dollar; return round($minPrice->min * $calculated_rate); } else if ($minPrice->currency == 'eur') { $calculated_rate = 1 / $rate->euro; return round($minPrice->min * $calculated_rate); } else if ($minPrice->currency == 'gbp') { $calculated_rate = 1 / $rate->gbp; return round($minPrice->min * $calculated_rate); } } 

Любая помощь будет оценена по достоинству.

Related of "Laravel logical – конвертировать цену, поэтому на frontend у меня всегда значение chf"