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值取代。
答案 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']]);