雄辩的倍数 where from date fields <= >=

Posted

技术标签:

【中文标题】雄辩的倍数 where from date fields <= >=【英文标题】:Eloquent multiple where from date fields <= >= 【发布时间】:2016-09-14 06:17:07 【问题描述】:

我想从 mysql 表中选择项目。 我使用 Laravel 5.2 & Eloquent

我的表结构: 编号 | item_id |姓名 |日期开始 |日期结束

id = 主要,自动 item_id = int 姓名 = 文字 date_start & date_end 为 'Date' 类型,格式为 '2016-09-14'

我的查询:

$dateFormated = date('Y-m-d',$tempDate);
$items = ItemList::where('item_id', $id)
  ->where('date_start', '>=', $dateFormated)
  ->where('date_end', '<=', $dateFormated)
  ->get()

如果我删除一个 where 子句,我会为所有具有正确 date_start/date_end 值的项目获得正确的结果

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

【问题讨论】:

试试between条件。 @urfusion : 据我所知,between 并没有比&gt;=, &lt;= 更完美。 @Virb 根据docs,两者之间做的完全一样 【参考方案1】:

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

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

根据 cmets 中提供的数据,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 子句时获得良好结果的原因 - 这些事件不是在同一日期开始和结束。

正如 cmets 所证实的,这实际上是 的问题。 WHERE 子句不符合要求。解决方案是使用 orWhere

【讨论】:

是的,我确定...搜索日期必须在开始/结束日期的范围内。如果 start_date 是 2016-01-01 和 end_date 2016-01-31,则 $dateFormated 是 2016-01-12。 给出你的例子,你最终得到以下表达式 "2016-01-01">="2016-01-12" 和 "2016-01-13" 【参考方案2】:

这对我有帮助

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

试试看,希望能帮到你。

【讨论】:

对不起,没有。结果是一样的......空数组:(

以上是关于雄辩的倍数 where from date fields <= >=的主要内容,如果未能解决你的问题,请参考以下文章

laravel 雄辩的 where 子句与枢轴

Laravel 4 雄辩的查询

Laravel引用母亲查询

从列或到外键的Laravel过滤器

select * from [table] where min(date) > 某个日期

无法使用 Laravel 雄辩模型更新 json 列