我有一个任务模型和一个步骤模型.每个任务可以有多个步骤.我希望能够显示所有任务,包括进度条.进度条的长度将由总步数和已完成的总步数来计算.因此,我将进行如下计算:
100% / $total_steps * $total_steps_completed
已完成的步骤将其在数据库中的状态设置为1.我知道如何获取$total_steps.我只是做一个count($task-> steps),所以它计算数组中的总行数.
但是,如何计算状态为1的步骤?
任务模型:
class Task
{
public function steps()
{
return $this->hasMany('App\Step');
}
}
步骤模型:
class Step
{
public function task()
{
return $this->belongsTo('App\Task');
}
}
TasksController:
class TasksController
{
public function index()
{
$tasks = User::find(Auth::user()->id)->tasks->with('steps')->get();
return view('tasks', compact('tasks');
}
}
每个任务都属于一个用户,因此属于User :: find()-> tasks等.
在我的步骤表中,我有以下字段:
$table->integer('status');
可以将其设置为0或1. index.blade.php视图我有一个简单的foreach:
@foreach($tasks as $task)
{!! $task->id !!} // This is 1 for example
Total Steps: {!! count($task->steps) !!} // Returns 5 if there are 5 rows in the steps database with task_id `1` for example
@endforeach
现在,我需要计算将其状态设置为1的总步骤,以便执行计算并显示进度条.我认为我应该在我的步骤模型中为此添加一个功能,或者一个范围.但是我坚持这一点,所以任何指针都将不胜感激.
解决方法:
您可以添加一个带条件的关系,以返回任务的所有已完成步骤:
任务
public function completedSteps()
{
return $this->hasMany('App\Step')->where('status','=', 1);;
}
然后,您可以获得任务以及步骤和完成的步骤:
TasksController
$tasks = User::find(Auth::user()->id)->tasks->with('steps', 'completed_steps')->get();
在您看来,您可以访问这些步骤,并同时计算completed_steps:
视图
count( $task->completedSteps()->get() );