【问题标题】:laravel query whereBetween doesn't work [duplicate]laravel 查询 whereBetween 不起作用[重复]
【发布时间】:2018-09-09 04:25:54
【问题描述】:

这是我的 Laravel 查询。

$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。感谢您的建议。

【问题讨论】:

  • only return leaveIds-> 您只选择了leaveIds 列,因此您的查询将只给出该输出。你认为它还能给你什么?
  • 我已经更新了代码。是的,但它不检查之间的位置
  • 当你说它返回 leaveID 时,你的意思是它返回所有数据还是什么?
  • @max :- 检查这个答案:- stackoverflow.com/a/35926066/4248328
  • @max: 请检查我的回答

标签: php arrays laravel date laravel-query-builder


【解决方案1】:

它将返回休假 ID,因为您选择的是 leaveId。如果您想要所有带有leaveId 的数据,请删除选择部分。

【讨论】:

  • 是的,但它不检查两者之间的关系。我想在检查中间后得到 leaveIds。
【解决方案2】:

你应该试试这个:

$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();

【讨论】:

  • 传递此错误 SQLSTATE[42000]: Syntax error or access violation: 1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法,以便在“从“2018-04-09”和“2018-04-28”或“2018-04-09”和“2018-”之间使用在第 1 行 (SQL: select leaveId from leaves where (from BETWEEN "2018-04-09" AND "2018-04-28" OR to BETWEEN "2018-04-09" AND "2018-04-28 ")
  • @max: 请检查我是否更新了答案
  • 使用名为from 的列进行原始查询可能会很棘手,因为它是大多数 SQL DBMS 中的保留字,并且很可能需要特殊格式,如果不是,通常由相应的 SQL 语法完成- 使用原始方法。
猜你喜欢
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
  • 2022-07-06
  • 2021-12-19
  • 1970-01-01
  • 2018-11-08
  • 2015-01-13
  • 1970-01-01
相关资源
最近更新 更多