【发布时间】:2021-06-15 10:14:31
【问题描述】:
我有这个 SQL,它将返回所有转换后的货币汇率的作业,并且它运行良好,但由于我们使用 API 资源,我们必须使用 Eloquent 模型才能像我们配置的那样获取响应数据。
select * from (
select
jr.id,
title,description,
FORMAT(jr.amount,2) as base_amount,
c.symbol as base_currency,
FORMAT(IFNULL(jr.amount * currency_rate.rate,jr.amount),2) as amount,
jr.created_at,
user_id,type,country_id,city_id,
delivery_hours,deleted_at
from job_requests as jr
left join currencies as c on c.id = jr.currency_id
left join currency_rates as currency_rate on ((currency_rate.from_currency = c.symbol AND currency_rate.to_currency = "QAR"))
) as job_requests order by amount desc ;
我可以写这个
$jobRequests = JobRequest::from('job_requests')->select("job_requests.id", "title", "description", DB::raw("format(job_requests.amount, 2) as base_amount"), "c.symbol as base_currency", DB::raw("format(ifnull(job_requests.amount * currency_rate.rate, job_requests.amount),2) as amount"), "job_requests.created_at", "user_id", "type", "country_id", "city_id", "delivery_hours", "deleted_at")
->leftJoin("currencies as c", function($join){
$join->on("c.id", "=", "job_requests.currency_id");
})
->leftJoin("currency_rates as currency_rate", function($join){
$join->on('currency_rate.from_currency','=','c.symbol');
$join->where('currency_rate.to_currency', 'TRY');
#$join->on('currency_rate.to_currency', '=', DB::raw("c.symbol"));
})
但我不知道如何将所有这些放在另一个 JobRequest 模型中,以便我可以使用子句进行各种排序。
【问题讨论】:
-
什么是
JobRequest?如果它是 Eloquent 模型,它已经有一个关联的表,因此不需要from()。此外,leftJoin()s 通常实现为关系函数。你现在也可以使用一个简单的DB::table('job_requests')->select()...(虽然它不适合 Eloquent 模型,而是一个普通的 php 对象) -
这是一张雄辩的桌子。我不能使用 DB:: 因为如果我这样做,我将无法使用诸如 $job->user->resumes 之类的东西
-
我正在尝试做类似的事情stackoverflow.com/a/53023796/10602851
标签: php mysql laravel eloquent