来自日期字段< => =

时间:2016-09-14 06:17:07

标签: php mysql laravel eloquent laravel-5.2

我想从mySql表中选择Items 我使用Laravel 5.2&口才

我的桌子结构:
id | item_id |名字| date_start | DATE_END

  • id = primary,auto
  • item_id = int
  • name = text
  • date_start& date_end是“日期”类型,格式为“2016-09-14”

我的查询:

$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值的项目。

我做错了什么,我该怎么办?

2 个答案:

答案 0 :(得分:3)

你只需要交换运营商就可以了。

  ->where('date_start', '<=', $dateFormated)
                         ^
  ->where('date_end',   '>=', $dateFormated)
                         ^

根据评论中提供的数据,date_start必须在formattedDatedate_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)));
    }
尝试一下,希望能有所帮助。