首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel logical -转换价格,因此在前端我始终有chf值

Laravel logical -转换价格,因此在前端我始终有chf值
EN

Stack Overflow用户
提问于 2017-02-05 15:13:47
回答 1查看 869关注 0票数 0

这有点重。我的cms里有四种货币,美元,英镑,欧元和主要的一种瑞郎。此外,在我的内容管理系统中,管理员可以添加学校,在学校内您可以创建课程,然后管理员可以设置特定课程的价格,以美元或英镑,欧元或瑞士法郎。我的作业是什么,如果学校有多门课程,而这些课程都有不同的价值,我需要赶上价格最低的课程,这样我就可以在我的前端写下:“课程从XX -CHF开始”。在我的cms中,管理员可以设置自己的汇率,CHF总是设置为1,但他们可以添加自己的美元、英镑或欧元的值。

到目前为止,我所做的是取该课程的最小值,并将其转换为CHF。它工作得很好。

问题是:如果一个课程设置为10欧元,另一个课程设置为10美元,我将采用第一个值,因此它可以计算10欧元作为最低价格aldo 10美元是最低价格。所以我需要以某种方式,计算查询中的货币,但不知道如何做到这一点。

以下是我到目前为止所做的工作:

代码语言:javascript
复制
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);
        }
    }
}

因此,在我的第一个查询中,我得到了数据库中最低的价格:

代码语言:javascript
复制
{#732 ▼
+"currency": "usd"
+"min": "5.00"
}

在第二个查询中,我从由admin设置的数据库中获取货币:

代码语言:javascript
复制
array:1 [▼
  0 => {#844 ▼
    +"dollar": "1.0000"
    +"euro": "2.0000"
    +"gbp": "3.0000"
  }
]

然后我进行计算,将美元、英镑、欧元转换为瑞士法郎

代码语言:javascript
复制
    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);
        }
    }

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 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)修改现有查询,链接货币兑换表,动态计算汇率,选择最小值:

代码语言:javascript
复制
$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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42049479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档