У меня есть проблема, может быть, вы можете мне помочь.
В моей модели 1 событие имеет N отчетов, затем 1 отчет имеет M рабочих.Мне нужно опросить работников, у которых есть отчеты на конкретную дату события (месяц + год) с количеством отчетов на эту дату и временем, затраченным на все отчеты за эту дату.Потеря времени - это отчет start_at - отчет end_at.
Мой запрос работает, кроме потерянного времени.Я нашел хороший трюк в # 2 Laravel Eloquent Сумма отношения столбца отношения подсчитывает сумму, но это не работает для меня.
$workers = Worker::whereHas('reports', function ($query) use ($month, $year) {
$query->duringMonth($month, $year);
})->withCount(['reports' => function ($query) use ($month, $year) {
$query->duringMonth($month, $year);
}, 'reports AS total_minutes' => function ($query) use ($month, $year) {
// here is the problem
$query->select(DB::raw('SUM(DATEDIFF(start_at, end_at)) as totalminutes'))->duringMonth($month, $year);
}])->with('media.model')->get()
В этом запросе total_minutes всегда равно 0.
Если я поменяю строки конфликта на
$query->selectRaw('SUM(DATEDIFF(start_at , end_at)) AS minutes')
->duringMonth($month, $year);;
total_minutes - это всегда число отношений, а не минут.
Если вам нужно увидеть в рамках видимости в течение месяца:
public function scopeDuringMonth($query, $month, $year)
{
return $query->join('events', 'reports.event_id', '=', 'events.id')
->whereYear('events.date', '=', $year)
->whereMonth('events.date', '=', $month);
}