我有一个Task模型和一个Step模型。每个任务可以有多个步骤。我希望能够显示所有任务,包括进度条。进度条的长度将通过总步数和完成的总步骤计算。所以我会做一个类似的计算:
100% / $total_steps * $total_steps_completed
已完成的步骤将其在数据库中的状态设置为1.我知道如何获取$ total_steps。我只是做一个计数($ task->步骤),所以它计算数组中的总行数。
但是,如何计算状态为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
等等。
在我的steps
表中,我有以下字段:
$table->integer('status');
这可以设置为0或1.在我的任务中 - > index.blade.php
我认为我有一个简单的预言:
@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
的总步数,这样我就可以执行计算并显示进度条。我想我应该在我的步骤模型中为这个或者一个范围添加一个函数。但我坚持这一点,所以任何指针都会受到赞赏。
答案 0 :(得分:2)
您可以使用"范围" laravel功能。 你可以在这里找到一些关于它的信息
http://www.easylaravelbook.com/blog/2015/06/23/using-scopes-with-laravel-5/
您的Step模型基本上都有这种方法:
String dtStart = empDobTxt.getText().toString();
try {
Calendar calDtStart = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.EN_US);
calDtStart.setTime(dtStart);
Calendar nowDate = Calendar.getInstance();
if(calDtStart.before(nowDate));
{
holder.empDobTxt.setTextColor(Color.RED);
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
然后你应该能够通过以下方式完成这些步骤:
class Step extends Model
{
public function scopeDone($query)
{
return $query->where('status', 1);
}
}
注意:为了使用范围,将步骤作为关系(通过添加双括号)非常重要。否则你会得到一个没有范围功能的简单集合。
答案 1 :(得分:2)
您可以添加条件关系以返回任务的所有已完成步骤:
<强>任务强>
public function completedSteps()
{
return $this->hasMany('App\Step')->where('status','=', 1);;
}
然后,您可以完成任务以及步骤和完成的步骤:
<强> TasksController 强>
$tasks = User::find(Auth::user()->id)->tasks->with('steps', 'completed_steps')->get();
在您的视图中,您可以访问steps
并同时计算completed_steps
:
查看强>
count( $task->completedSteps()->get() );