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

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

laravel查询生成器之间有什么不同

  1. //fecth query
  2. $query = DB::table('order_details')
  3. ->select('order_code', 'product_name', 'qty', 'order_details.total_price as subtotal')
  4. ->leftJoin('orders', 'order_details.order_id', '=', 'orders.id')
  5. ->whereRaw('DATE_FORMAT(orders.order_date, "%Y-%m-%d") BETWEEN ? AND ?', ["'".$start_date."'", "'".$end_date."'"]);
  6. var_dump($query->get());

这个mysql查询

  1. select `order_code`, `product_name`, `qty`, `order_details`.`total_price`as `subtotal`
  2. from `order_details`
  3. left join `orders` on `order_details`.`order_id`=`orders`.`id`
  4. where DATE_FORMAT(orders.order_date, "%Y-%m-%d") between '2017-07-01' and '2017-07-31'

我无法从laravel query builder得到任何结果,但是我在mysql上得到了,尽管我有相同的开始和结束日期输入。我的laravel查询有什么问题吗?
编辑:嗯。。。。在我把where子句改成这个之后

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

它给出了与mysql查询相同的结果,但是为什么呢。我是否正确地将whereraw()用于第一个where子句?如果我也使用wherebetween(),它不会给出结果

  1. ->whereBetween(DB::raw('DATE_FORMAT(orders.order_date, "%Y-%m-%d")'), ["'".$start_date."'", "'".$end_date."'"]);

我在whereraw()和wherebetween()的第一个用法中是否有错误?错误在哪里?whereraw()是否只能传递整数数组?当我尝试使用以下代码查看first whereraw()和wherebetween()上的查询日志时

  1. DB::enableQueryLog();
  2. var_dump($query->get());
  3. var_dump(DB::getQueryLog()[0]['query']);

我得到这个结果

  1. "select `order_code`, `product_name`, `qty`, `order_details`.`total_price` as `subtotal`
  2. from `order_details`
  3. left join `orders` on `order_details`.`order_id` = `orders`.`id`
  4. where DATE_FORMAT(orders.order_date, "%Y-%m-%d") BETWEEN ? AND ?"

似乎“?”值没有被$start\u date和$end\u date值替换。

iugsix8n

iugsix8n1#

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

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

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

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

相关问题