如何在Laravel中加入2个表?

时间:2019-08-26 10:45:36

标签: mysql laravel laravel-5

我有两个模型,一个项目和一个任务。在任务模型上,我有一个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_idtasks = 1)

2 个答案:

答案 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'));
}