这有点重。我的cms里有四种货币,美元,英镑,欧元和主要的一种瑞郎。此外,在我的内容管理系统中,管理员可以添加学校,在学校内您可以创建课程,然后管理员可以设置特定课程的价格,以美元或英镑,欧元或瑞士法郎。我的作业是什么,如果学校有多门课程,而这些课程都有不同的价值,我需要赶上价格最低的课程,这样我就可以在我的前端写下:“课程从XX -CHF开始”。在我的cms中,管理员可以设置自己的汇率,CHF总是设置为1,但他们可以添加自己的美元、英镑或欧元的值。
到目前为止,我所做的是取该课程的最小值,并将其转换为CHF。它工作得很好。
问题是:如果一个课程设置为10欧元,另一个课程设置为10美元,我将采用第一个值,因此它可以计算10欧元作为最低价格aldo 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"
}
]然后我进行计算,将美元、英镑、欧元转换为瑞士法郎
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);
}
}任何帮助都将不胜感激。
发布于 2017-02-06 12:39:59
以下是解决此问题的一种方法:
1)通用化您的货币兑换表,使所有汇率都与瑞郎相关。因此,也许exchange_rates表可以包含以下列:id, currency_name, currency_code, rate。一个示例条目是:1, 'US Dollar', 'USD', 0.99。
2)将season_prices.currency修改为指向currency_exchange.id的整型外键
3)修改现有查询,链接货币兑换表,动态计算汇率,选择最小值:
$minPrice = DB::table('schools')
->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')
->join('exchange_rates', 'season_prices.currency', '=', 'exchange_rates.id')
->select('season_prices.currency', \DB::raw('MIN(season_prices.price * exchange_rate.rate) AS min'))
->first();https://stackoverflow.com/questions/42049479
复制相似问题