我在拉威尔关于聚合关系的文档中找不到这一点
我能够做这样的事情
private function refreshUsers()
{
$this->users = User::withSum(['taskTimeSessions'=> function ($query) {
$query->whereMonth('created_at',$this->month)
->where('is_reconciled',1);
}],'session_duration_in_seconds')
->get();
}
但现在我想问的是Sprint
米的总时间是多少,或者至少一次冲刺中的各个任务有多少时间,这样我就可以以某种方式将这些时间加起来.
- Sprint有很多Sprint任务(数据透视表)
- Sprint任务属于一个任务
- 任务具有多个TaskTimeSession
因此,我正在try 查找TaskTimeSession的总时间
Sprint::with([
'sprintTasks.task'=> function ($query) {
$query->withSum('taskTimeSessions','session_duration_in_seconds');
}])
->get();
我没有收到任何错误,但在dd
的任何位置都找不到结果
我以为我会走运,能有这样的工作
->withSum('sprintTasks.task.taskTimeSessions', 'session_duration_in_seconds')
但我得到了这个错误
Call to undefined method App\Models\Sprint::sprintTasks.task()
如果有人能帮我解决这个问题,即使不包括Sum,也将不胜感激.
按要求,这些都是模型.
// Sprint
public function sprintTasks()
{
return $this->hasMany(SprintTask::class, 'sprint_id');
}
// SprintTask
protected $fillable = [
'sprint_id',
'task_id',
'is_completed'
];
public function task()
{
return $this->belongsTo(Task::class,'task_id');
}
public function sprint()
{
return $this->belongsTo(Task::class,'sprint_id');
}
// Task
public function taskTimeSessions()
{
return $this->hasMany(TaskTimeSession::class, 'task_id');
}
// TaskTimeSessions
protected $fillable = [
'task_id',
'session_duration_in_seconds'
];
public function task()
{
return $this->belongsTo(Task::class,'task_id');
}
是否可以将其抽象为模型,如下所示
public function totalTaskTime() {
// using the relationship stuff to figure out the math and return it?
}
寻求任何关于如何做这件事的最好方法的建议.
现在我真的在刀锋上做这件事,看起来很糟糕
@php
$timeTracked = 0;
foreach ($sprint->sprintTasks as $sprintTask) {
$timeTracked += $sprintTask->task->time_tracked_in_seconds;
}
@endphp