Красноречивая сумма единиц за период с даты - PullRequest
0 голосов
/ 07 июня 2018

У меня есть таблица (проекты), которая содержит дату начала и продолжительность (в неделях) и число (progress_pw) относительно того, сколько единиц прогресса можно достичь за неделю

projects
+----+----------+--------+-----------+
| ID |start_date|duration|progress_pw|
+----+----------+--------+-----------+
|  1 |2018-06-15| 2      | 500       |
|  2 |2018-06-19| 4      | 120       |

Я хочу получитьсводка по неделям общего числа единиц прогресса, которые, как ожидается, будут использоваться в течение данной недели.

Например:

* На неделе, начинающейся в понедельник, 11 июня, ожидается, что project.id 1 будет потреблять 500 единиц

* На неделе, начинающейся в понедельник, 18 июня, project.id 1.Ожидается, что он будет потреблять 500 единиц, а project.id 2, как ожидается, будет потреблять 120 единиц с общим потреблением 620 единиц.

* На неделе, начинающейся с 2018-12-01 (когда-нибудь в будущем), нетактивных проектов, поэтому потреблено 0 единиц.

$i=0;$weeks=12;
while ($i < $weeks) {
    $thisweek = Carbon::now()->addWeeks($i)->startOfWeek()->format('Y-m-d');
    $requiredcap = DB::table('projects')->select(DB::raw("sum(progress_pw) as progress"))

    ->where('install_date', ">=", $thisweek) //<<< This is where im getting stuck!

    ->get();

    $capacity['label'][] = Carbon::now()->addWeeks($i)->startOfWeek()->format('d M');
    $capacity['required'][] = $requiredcap;
    $i++;
}

Есть ли какие-нибудь указатели на логику этого?

1 Ответ

0 голосов
/ 11 июня 2018

Попробуйте это:

$i = 0; $weeks = 12;
while ($i < $weeks) {
    $start = Carbon::now()->addWeeks($i)->startOfWeek();
    $end = (clone $start)->addDays(6);
    $requiredcap = DB::table('projects')
        ->select(DB::raw('sum(progress_pw) as progress'))
        ->whereBetween('start_date', [$start->toDateString(), $end->toDateString()])
        ->orWhere(function ($query) use ($start, $end) {
            $query->where('start_date', '<', $start->toDateString())
                ->where('end_date', '>=', $start->toDateString());
        })->first();
    $capacity['label'][] = $start->format('d M');
    $capacity['required'][] = $requiredcap->progress;
    $i++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...