簡體   English   中英

Laravel獲取關系計數,其中數據庫中的字段設置為特定值

[英]Laravel get relation count where a field in the database is set to a certain value

我有一個Task模型和一個Step模型。 每個任務可以有多個步驟。 我希望能夠顯示所有任務,包括進度條。 進度條的長度將通過總步數和完成的總步驟計算。 所以我會做一個像下面這樣的計算:

100% / $total_steps * $total_steps_completed

已完成的步驟將其在數據庫中的狀態設置為1.我知道如何獲取$ total_steps。 我只是做一個計數($ 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等。

在我的steps表中,我有以下字段:

$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的總步數,這樣我就可以執行計算並顯示進度條。 我想我應該在我的步驟模型中為這個或者一個范圍添加一個函數。 但我堅持這一點,所以任何指針都將受到贊賞。

您可以使用“范圍”laravel功能。 你可以在這里找到一些關於它的信息

http://www.easylaravelbook.com/blog/2015/06/23/using-scopes-with-laravel-5/

你的Step模型基本上有這個方法:

class Step extends Model
{
    public function scopeDone($query)
    {
        return $query->where('status', 1);
    }
}

然后你應該能夠通過以下方式完成以下步驟:

Total Steps: {{ $task->steps()->done()->count() }}

注意:為了使用范圍,將步驟作為關系(通過添加雙括號)非常重要。 否則,您將獲得一個沒有范圍功能的簡單集合。

您可以添加條件關系以返回任務的所有已完成步驟:

任務

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() );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM