php-Laravel获取关系计数,其中数据库中的字段设置为某个值

我有一个任务模型和一个步骤模型.每个任务可以有多个步骤.我希望能够显示所有任务,包括进度条.进度条的长度将由总步数和已完成的总步数来计算.因此,我将进行如下计算:

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() );
上一篇:关系抽取 ---远程监督 ---《Robust Distant Supervision Relation Extraction via Deep Reinforcement Learning》


下一篇:Relation Network for object detection