Php laravel查询whereBetween不起作用

Php laravel查询whereBetween不起作用,php,arrays,laravel,date,laravel-query-builder,Php,Arrays,Laravel,Date,Laravel Query Builder,这是我的拉威尔问题 $fromdate = '2018-04-09'; $todate = '2018-04-28'; $dt = array($fromdate, $todate); return DB::table('leaves') ->select('leaveId') ->whereBetween('from', [$dt[0], $dt[1]]) ->orWhereBetween('to', [$dt[0], $dt[1]]) ->get();

这是我的拉威尔问题

$fromdate = '2018-04-09';
$todate = '2018-04-28';
$dt = array($fromdate, $todate);
return DB::table('leaves')
  ->select('leaveId')
  ->whereBetween('from', [$dt[0], $dt[1]])
  ->orWhereBetween('to', [$dt[0], $dt[1]])
  ->get();
我的数据库行

'11', 'ckkl;kghhjgkgvjkvvb,,kkkkhhhhh', '2018-03-29', '2018-04-21', '2018-04-22', 'Sam User', NULL, '2018-03-29 10:52:48', '2018-03-29 10:52:48', '2', '8', '1'
'10', 'pjp\'', '2018-03-29', '2018-04-11', '2018-04-12', 'test user', NULL, '2018-03-29 10:50:28', '2018-03-29 10:50:28', '1', '8', '1'

似乎它没有检查whereBetween子句。它只返回leaveId。谢谢您的建议。

它将返回休假id,因为您正在选择leaveId。如果要使用leaveId删除所有数据,请删除所选部分。

您应该尝试以下操作:

$fromdate = '2018-04-09';
$todate = '2018-04-28';
$dt = array($fromdate, $todate);
return DB::table('leaves')
  ->select('leaveId')
  ->whereRaw('from BETWEEN "'.$fromdate.'" AND "'.$todate.'" OR to BETWEEN "'.$fromdate .'" AND "'.$todate.'"')
  ->get();

仅返回leaveId->您选择的是only leaveId列,因此您的查询将只给出该输出。你认为它还能给你什么?我有更新代码。是的,但它不检查两者之间的关系当你说它返回leaveID时,你是说它返回所有数据还是什么?@max:-检查这个答案:-@max:请检查我的答案是的,但它不检查两者之间的关系。我想在检查where-between之后获取LeaveID。传递此错误SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解可在第1行中使用的“从2018-04-09到2018-04-28之间或从2018-04-09到2018-04-28之间”或“从2018-04-09到2018-04之间”附近使用的正确语法。SQL:从叶子中选择leaveId,其中从2018-04-09到2018-04之间或从2018-04到2018-04之间-28@max当前位置请检查我是否已更新我的答案使用名为from的列的原始查询可能很棘手,因为它在大多数SQL DBMS中是一个保留字,很可能需要特殊的格式,如果使用非原始方法,通常由相应的SQL语法完成。