首页 > 解决方案 > Laravel Eloquent WhereBetween 与逗号分隔的时间戳?

问题描述

在此处输入图像描述

鉴于上图......使用 Laravel 的 Eloquent - 我如何查找特定日期范围以返回该范围内的行?

我知道 Laravel 有一个 whereBetween 函数可以处理传统的日期字段,但由于这些是时间戳,我意识到我必须使用类似的东西where('dates', '>=', $startTimestamp)where('dates', '<=', $endTimestamp)但我还必须将它应用于从柱子?

谢谢你们的帮助!

标签: phpmysqllaraveldateeloquent

解决方案


尽管它可能是糟糕的数据库设置,但有时事情只需要按照目前的方式完成——出于业务原因或迟到或其他原因;一个难看的修复可能比全面大修更好 - 特别是在系统很小并且将保持很小的情况下,不需要过度考虑处理速度。

这是提出问题的解决方案,利用 MySQL 表连接,从该连接响应中进行选择。这也是用 Laravel 编写的,因此是 DB 静态函数。

$temp = DB::select(DB::raw("select
  leave_entries.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(leave_entries.dates, ',', numbers.n), ',', -1) dates
  from
  (select 1 n union all
   select 2 union all select 3 union all
   select 4 union all select 5) numbers INNER JOIN leave_entries
  on CHAR_LENGTH(leave_entries.dates)
     -CHAR_LENGTH(REPLACE(leave_entries.dates, ',', ''))>=numbers.n-1
     where uid = {$uid}
     AND dates >= {$start_timestamp} 
     AND dates <= {$end_timestamp}
  order by
  id, n"));

// Return the resulting table:
dd($temp);

将其留在这里而不是删除问题,因为它可能对某人有所帮助。

未来的人:在你的情况下 - 如果你可以重做数据库模式,就像我对我的问题的评论所建议的那样,那么就这样做。


推荐阅读