使用laravel查询构建器无法获得任何结果

时间:2018-01-11 18:01:00

标签: mysql laravel-5 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子句改成了这个

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

它给了我与mysql查询相同的结果,但为什么呢。我是否正确使用whereRaw()作为第一个where子句? 如果我使用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值取代。

1 个答案:

答案 0 :(得分:0)

尝试从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']]);