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