【发布时间】:2019-08-26 10:45:36
【问题描述】:
我有两个模型一个项目和一个任务。在任务模型上,我有一个 fK project_id 和 2 个整数字段,用于输入以分钟和小时为单位的持续时间。 我想单击项目,获取其 ID,然后查看任务表并根据具有 project_id 的 fk 的所有任务计算该项目的小时数和分钟数。
这是我尝试过的
项目 - 模型
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);
}
在视图中
<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>
这是我遇到的错误
SQLSTATE[42S22]:找不到列:1054 '字段列表'中的未知列 'duration_min'(SQL:选择 sum(duration_min) 作为来自tasks 的聚合,其中project_id = project.id 和@987654329 @ = 6 和tasks.company_id = 1)
【问题讨论】:
-
见Why should I provide a Minimal Reproducible Example for a very simple SQL query? ..你也应该提供更多的PHP代码来定义你的模型..
-
我还想知道在 MySQL 中创建视图是否更容易并获得更高的性能...
CREATE ALGORITHM=MERGE VIEW ... AS (<query_with_joins>)并使用 Laravel 进行选择。ALGORITHM=MERGE将优化/重写已完成的查询在 VIEW 上查看视图定义,这在手册 View Processing Algorithms 中有更好的解释......这使得 VIEW 像 SQL 预处理器或 SQL 模板引擎一样工作更容易说......