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 ?