【发布时间】:2021-08-09 07:25:36
【问题描述】:
我正在尝试将 MYSQL 查询转换为 Laravel 的 Eloquent 格式,MYSQL 版本在 MySQL Workbench 上返回一个值,但 Eloquent 版本返回一个具有相同请求参数的空值。
这里是查询的 MYQSL 版本
" select
SUM(
DATEDIFF(
if( end_date > $end_date, $end_date, end_date ),
if( start_date < $start_date, $start_date, start_date )
) * child_rate
)
from rates where start_date < $end_date and end_date > $start_date
";
这是 Laravel 的 Eloquent 版本
$rate_query = "
SUM(
DATEDIFF(
if( end_date > $end_date, $end_date, end_date ),
if( start_date < $start_date, $start_date, start_date )
) * child_rate
)
";
$total_child_rate = DB::table('rates')
->selectRaw(DB::raw($rate_query))
->where('start_date', '<', $end_date)
->where('end_date', '>', $start_date)
->get();
我做错了什么?
Edited this question to show the answer below
编写原始查询的正确方法是将查询包装在single qoute 中。下面是@damask回答后问题的解决方法
$rate_query = '
SUM(
DATEDIFF(
if( end_date > ?, ?, end_date ),
if( start_date < ?, ?, start_date )
) * child_rate
)
';
$total_child_rate = DB::table('rates')
->selectRaw(DB::raw($rate_query), [$end_date, $end_date, $start_date, $start_date])
->where('start_date', '<', $end_date)
->where('end_date', '>', $start_date)
->get();
【问题讨论】:
标签: php mysql laravel eloquent mysql-workbench