Laravel Eloquent和时间比较

时间:2015-05-05 18:42:36

标签: php laravel eloquent

我试图使用一个先进的位置来使用包含日期比较的Laravel Eloquent来提取条目。虽然我找到了另一种方法来运行日期比较(在我取消记录后的另一个foreach),但它仍然让我觉得为什么这不起作用。只是好奇是否有其他人对此有一些反馈。这就是我所拥有的:

$surveys = Survey::where('is_published', 1)
                ->whereNull('closes_at')
                ->orWhere('closes_at', '>', date('Y-m-d H:i:s'))
                ->whereHas('assigned', function($q){
                    $q->where('employee_id', Session::get('employee_id'));
                })->orWhere('assigned_to_all', 1)
                ->orderBy('updated_at', 'desc')
                ->orderBy('created_at', 'desc')
                ->get();

所以我试图做的是拉出所有的调查:

  • 公布
  • 要么将它们分配给每个人,要么专门分配给他们(“已分配”模块)。
  • 在(截止日期)结束时为空或未关闭。

如果我从数据库中取出它,那很好。只是无法使用Eloquent来吸引正确的人。我尝试了几个不同的日期调用,但没有一个正在工作。

任何人都有任何提示吗?

1 个答案:

答案 0 :(得分:1)

您正在调查'is_published'= 1并且(closes_at为null或closes_at>当前时间或assigned_to_all = 1或专门分配给它们)的调查。试试这个:

$surveys = Survey::where('is_published', 1)
            ->where(function($query){
                $query->whereNull('closes_at')
                    ->orWhere('closes_at', '>', date('Y-m-d H:i:s'));
            })
            ->where(function($query){
                $query->whereHas('assigned', function($q){
                        $q->where('employee_id', Session::get('employee_id'));
                    })
                ->orWhere('assigned_to_all', 1);
            })
            ->orderBy('updated_at', 'desc')
            ->orderBy('created_at', 'desc')
            ->get();