获取落在日期范围之间的任务或超出日期范围

时间:2016-06-23 19:18:58

标签: laravel eloquent laravel-5.2

这将是一个复杂的事情要解释 - 但我会尽我所能。 下面我有一个方法来获取在日期范围内分配给用户的所有任务(来自特定团队)......

现在,它应该(部分地)正常工作:

  • 从当前团队获取任务
  • 分配给身份验证用户

需要任务......

  • 任务开始日期属于日期范围
  • 任务截止日期属于日期范围

但我还需要开始日期 可以 之前日期范围和/或截止日期的任务可以 AFTER 日期范围。

这很有效。但是,它也从其他团队那里获取任务。例如,如果我切换到团队2.团队1的分配的任务也将出现(当他们不应该这样做时)。

所以我假设它与我的where条款有关。这是一个复杂的野兽。希望有人可以提供帮助。

方法:

$tasks = Team::currentTeam()
    ->tasks()
    ->assignedToUser()
    ->where([
        ['status', '!=', 'completed'],
        ['due_date', '<=', $start_date],
        ['start_date', '<>', $start_date],
        ['start_date', '<', $end_date],
    ])
    ->orWhere([
        ['due_date', '>', $start_date]
    ])
->get();

当前团队范围:

public function scopeCurrentTeam($query)
{
    $current_team = Auth::user()->current_team_id;
    return $query->find($current_team);
}

分配给用户范围:

public function scopeAssignedToUser($query)
{
    return $query->with('user', 'comments')->whereHas('user', function($query) {
        $query->where('user_id', Auth::user()->id);
    })->orHas('user', '=', 0);
}

1 个答案:

答案 0 :(得分:0)

好吧,我想出来了 - 把我的思维上限写下来,写下查询的所有可能方案并让它发挥作用。

首先,我必须将'UITableView'的大量列表包含在wheres中,这样我的课程(就像我之前的那样)与我的关系(->where(function()..)没有冲突, tasks()范围。

也许有更简洁的方法来执行此操作?这是个丑陋的丑陋...我得到了一个“复选标记”,无论谁都可以;)我可能会为那个很长的地方创建一个范围并将其从我的控制器中取出。

assignedToUser()