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

31moq8wy  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(591)

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 query builder得到任何结果,但是我在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()是否只能传递整数数组?当我尝试使用以下代码查看first 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\u date和$end\u date值替换。

iugsix8n

iugsix8n1#

请尝试从whereraw中的绑定中删除引号

->whereRaw('DATE_FORMAT(orders.order_date, "%Y-%m-%d") BETWEEN ? AND ?', [$start_date, $end_date]);

另外,作为建议,可能也不需要使用日期格式。如果要在只有日期部分的情况下进行日期比较,只需更改绑定:

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

相关问题