我有两个模型,一个项目和一个任务。在任务模型上,我有一个fK project_id和2个整数字段,以分钟和小时为单位输入持续时间。 我想单击项目,获取其ID,然后查看任务表,并根据所有具有project_id fk的任务来计算该项目的小时和分钟。
这是我尝试过的
项目-模型
JSONArray arr = new JSONArray(jsonString);
在控制器中
public static function getTotalHoursInProgressProject() {
$project =Project::all();
$projectHrsProgress = Task::where('project_id', '=', 'project.id')->where('board_column_id', '=' ,'6')->sum('duration_hrs');
$taskHours = $projectHrsProgress * 60;
$projectMinProgress = Task::where('project_id', '=', 'project.id')->where('board_column_id', '=' ,'6')->sum('duration_min');
$finalHrsInprogress = ($taskHours + $projectMinProgress )*0.016667;
// $finalHrsInprogressTotal = (float) $finalHrsInprogress;
return number_format((float)$finalHrsInprogress, 2, '.', '');;
}
在视图中
public function show($id)
{
$this->project = Project::findOrFail($id);
$this->categories = TaskCategory::all();
$this->taskInProgress = Project::getTotalHoursInProgressProject();
return view('admin.projects.tasks.show', $this->data);
}
这是我遇到的错误
SQLSTATE [42S22]:找不到列:1054'字段列表'中的未知列'duration_min'(SQL:从 <div class="col-md-3">
<div class="white-box p-t-10 p-b-10 bg-warning">
<h3 class="box-title text-white">In Progress Hours</h3>
<ul class="list-inline two-part">
<li><i class="icon-layers text-white"></i></li>
<li class="text-right"><span id="" class="counter text-white">{{ $taskInProgress }}</span></li>
</ul>
</div>
</div>
中选择汇总(duration_min
),其中tasks
= project.id并且project_id
= 6和board_column_id
。tasks
= 1)
答案 0 :(得分:2)
您可以在项目模型中创建laravel具有关联性,然后可以访问查询中的关联数据。
还可以通过在如下模型中创建两个函数来获得总时间。
在项目模型中:
public function Task()
{
return $this->hasMany('App\Task');
}
public function TotalTaskHour()
{
return $this->hasMany('App\Task')
->selectRaw('SUM(duration_hrs) as total_hrs')
->groupBy('project_id');
}
public function TotalTaskMinute()
{
return $this->hasMany('App\Task')
->selectRaw('SUM(duration_min) as total_mins')
->groupBy('project_id');
}
现在,控制器中的控制器可以访问相关数据。
在控制器中:
public function show($id)
{
$project = Project::with('TotalTaskHour')->with('TotalTaskMinute')->with('Task')->findOrFail($id);
$totalHour = $project->TotalTaskHour->total_hrs;
$totalHoour = $project->TotalTaskHour->total_mins;
$taskInProgress = $project->getTotalHoursInProgressProject();
dd($project);
}
确保您还创建了任务模型。
答案 1 :(得分:1)
在两个模型“项目和任务”之间使用一对一关系
public function show($id)
{
$project = Project::with('tasks')->findOrFail($id);
$taskInProgress = $project->getTotalHoursInProgressProject();
return view('admin.projects.tasks.show',compact('taskInProgress'));
}