laravel 查询生成器无法获得任何结果

Can't get any result with laravel query builder

laravel 查询生成器

之间有什么不同
//fecth query 
$query = DB::table('order_details')
->select('order_code', 'product_name', 'qty', 'order_details.total_price as subtotal')
->leftJoin('orders', 'order_details.order_id', '=', 'orders.id')
->whereRaw('DATE_FORMAT(orders.order_date, "%Y-%m-%d") BETWEEN ? AND ?', ["'".$start_date."'", "'".$end_date."'"]);
var_dump($query->get()); 

和这个 mysql 查询

 select `order_code`, `product_name`, `qty`, `order_details`.`total_price`as `subtotal` 
 from `order_details` 
 left join `orders` on `order_details`.`order_id`=`orders`.`id` 
 where DATE_FORMAT(orders.order_date, "%Y-%m-%d") between '2017-07-01' and '2017-07-31' 

我无法从 laravel 查询生成器获得任何结果,但我在 mysql 上获得了结果,即使我输入的开始日期和结束日期相同。我的 laravel 查询有什么问题吗?

编辑: 嗯……在我将 where 子句更改为 this

之后不知何故
->whereRaw(DB::raw('DATE_FORMAT(orders.order_date, "%Y-%m-%d") BETWEEN "'.$start_date.'" AND "'.$end_date.'"'));

它给我的结果与 mysql 查询相同,但为什么呢?我是否为第一个 where 子句正确使用了 whereRaw() ? 如果我也使用这个 whereBetween() ,它没有给我结果

->whereBetween(DB::raw('DATE_FORMAT(orders.order_date, "%Y-%m-%d")'), ["'".$start_date."'", "'".$end_date."'"]);

第一个whereRaw() 和whereBetween() 的用法有错吗?错在哪里? whereRaw() 只能传递整数数组吗?当我尝试使用此代码首先在 whereRaw() 和 whereBetween() 上查看查询日志时

DB::enableQueryLog();
var_dump($query->get());    
var_dump(DB::getQueryLog()[0]['query']);  

我得到这个结果

"select `order_code`, `product_name`, `qty`, `order_details`.`total_price` as `subtotal` 
from `order_details` 
left join `orders` on `order_details`.`order_id` = `orders`.`id` 
where DATE_FORMAT(orders.order_date, "%Y-%m-%d") BETWEEN ? AND ?"

好像是'?'值未被 $start_date$end_date 值 替换。

尝试从 whereRaw

中的绑定中删除引号
->whereRaw('DATE_FORMAT(orders.order_date, "%Y-%m-%d") BETWEEN ? AND ?', [$start_date, $end_date]);

此外,作为建议,可能也不需要使用 DATE_FORMAT。如果您尝试在只有日期部分的地方进行日期比较,只需更改您的绑定:

    ->whereRaw('orders.order_date BETWEEN ? AND ?', 
         [$start_date . ' 00:00:00', $end_date . ' 23:59:59']]);