雄辩的倍数 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
并没有比>=, <=
更完美。
@Virb 根据docs,两者之间做的完全一样
【参考方案1】:
你只需要交换运营商就可以了
->where('date_start', '<=', $dateFormated)
^
->where('date_end', '>=', $dateFormated)
^
根据 cmets 中提供的数据,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 子句时获得良好结果的原因 - 这些事件不是在同一日期开始和结束。
正如 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 <= >=的主要内容,如果未能解决你的问题,请参考以下文章