我想从mySql表中选择Items 我使用Laravel 5.2&口才
我的桌子结构:
id | item_id |名字| date_start | DATE_END
我的查询:
$dateFormated = date('Y-m-d',$tempDate);
$items = ItemList::where('item_id', $id)
->where('date_start', '>=', $dateFormated)
->where('date_end', '<=', $dateFormated)
->get()
如果我删除子句中的一个,我会得到正确结果,所有具有正确date_start / date_end值的项目。
我做错了什么,我该怎么办?
答案 0 :(得分:3)
你只需要交换运营商就可以了。
->where('date_start', '<=', $dateFormated)
^
->where('date_end', '>=', $dateFormated)
^
根据评论中提供的数据,date_start
必须在formattedDate
和date_end
之后之前或,因此您的条件与他们的相反应该是。
旧答案
->where('date_start', '>=', $dateFormated)
->where('date_end', '<=', $dateFormated)
除非您只想查找1个特定日期的记录,否则如何将开始日期和结束日期与同一日期进行比较?
语法很好,但逻辑可能不是。这样的查询将导致类似这样的
WHERE date_start>="2016-09-13" and date_end<="2016-09-13"
您确定要查找这些记录吗?
这就是为什么当您删除与日期相关的where子句时获得良好结果的原因 - 这些事件不是在同一日期开始和结束。
正如评论中所证实的那样,实际上 是 问题。根据要求,WHERE
子句不合逻辑。解决方案是使用 orWhere
答案 1 :(得分:0)
这对我很有帮助
if($start_date!=''){
$q->whereDate('date_start', '>=', date('Y-m-d', strtotime($start_date)));
}
if($end_date!=''){
$q->whereDate('date_end', '<=', date('Y-m-d', strtotime($end_date)));
}
尝试一下,希望能有所帮助。