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值替换。
1条答案
按热度按时间iugsix8n1#
请尝试从whereraw中的绑定中删除引号
另外,作为建议,可能也不需要使用日期格式。如果要在只有日期部分的情况下进行日期比较,只需更改绑定: