【问题标题】:Get users from table by date fields按日期字段从表中获取用户
【发布时间】:2020-05-06 01:18:00
【问题描述】:

我有一个日期格式为 YYYY-MM-DD 的表格,字段为:

user | assign_date | removal_date  
 A |  2020-01-01 | null  
 B |  2020-01-01 | 2020-01-05
 C |  2020-01-10 | null  

如何使用 Laravel Query Builder 或简单的 SQL 查询让用户将 assign_date 和删除日期与 selected_date 进行比较? 所需结果的示例。

selected date | users  
2020-01-03 | A,B (user C has not recruited yet)
2020-01-06 | A  (user C has not recruited yet and user B has already been fired)
2020-01-11 | A,C  (user C has already recruited, but user B has already been fired)

【问题讨论】:

  • 我认为你可以使用 eloquent 和 query builder

标签: sql laravel eloquent


【解决方案1】:

您似乎有可为空的日期类型字段。

所以你可以像这样过滤:

对于雄辩:

Model::where('assinged_date', '<=', $selected_date)
       ->where(function($q) use ($selected_date) {
            $q->whereNull('removal_date')
              ->orWhere('removal_date', '>=', $selected_date);
         })

对于查询构建器:

DB::table('table_name')->where('assinged_date', '<=', $selected_date)
                     ->where(function($q) use ($selected_date) {
                          $q->whereNull('removal_date')
                            ->orWhere('removal_date', '>=', $selected_date);
                       })

【讨论】:

  • 我尝试像这样在修补程序中检查它: $date = new Carbon\Carbon('2019-12-26'), RefCommittee::where('assignment_date', 'where(function($q) use ($date) { $q->whereNull('removal_date')->orWhere('removal_date', '>=', $date);}) 并返回 Illuminate\ Database\Eloquent\Builder {#3158} 为空
  • 请为removing_date设置一个默认日期值,以免您的查询出错。
  • removing_date 的默认值应该是多少?例如?毕竟,用户可以被雇佣而永远不会被解雇
  • @MaximStogniy 能否发布您认为需要显示的记录。
  • @MaximStogniy 看来你是在使用列日期类型来与碳的时间戳进行比较,尝试使用$date = (new Carbon\Carbon('2019-12-26'))-&gt;format('Y-m-d')
【解决方案2】:

你可以用这个

Model::where('assinged_date', '<=', $selected_date)
   ->orWhere('removal_date', '>=', $selected_date);
   ->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多