MYSQL 对比 Laravel 的 Eloquent
MYSQL vs Laravel's Eloquent
我正在尝试将 MYSQL 查询转换为 Laravel 的 Eloquent 格式,MYSQL 版本 returns MySQL Workbench,但 Eloquent 版本 returns 具有相同请求参数的空值。
这里是查询的 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();
使用 Laravel Telescope 查看查询输出并将其与原始查询进行比较。
可能因为您使用双引号设置 $rate_query
,$end_date
和 $start_date
被评估为 php 变量?尝试使用单引号或 Nowdoc ?
我正在尝试将 MYSQL 查询转换为 Laravel 的 Eloquent 格式,MYSQL 版本 returns MySQL Workbench,但 Eloquent 版本 returns 具有相同请求参数的空值。
这里是查询的 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();
使用 Laravel Telescope 查看查询输出并将其与原始查询进行比较。
可能因为您使用双引号设置 $rate_query
,$end_date
和 $start_date
被评估为 php 变量?尝试使用单引号或 Nowdoc ?