Laravel获得符合不同模型条件的集合

时间:2018-09-11 14:07:35

标签: laravel-5 eloquent relationship

我有两个模型:

Class Survey{
    public function steps(){
        return $this->hasMany( Step::class );
    }
}

Class Step{
    public function survey(){
        return $this->belongsTo( Survey::class );
    }

    public function isFinished( Survey $survey ){
        // Check some things
        return ( /* Chech if that step of the survey is finished */ ) ? true : false;
    }
}

在我的控制器中,我要检索完成特定步骤的所有调查。

public function getFinished( Step $step ){
    $finished = collect();
    $surveys = Survey::all();
    foreach( $surveys as $survey ){
        if( $step->isFinished( $survey ) ){
            $finished->push( $survey );
        }
    }
    return $finished;
}

我知道这不是一种有效的方法。我想从带有静态函数的模型中执行此操作,因此可以执行以下操作:

public function getFinished( Step $step ){
    return Survey::getFinished( $step );
}

1 个答案:

答案 0 :(得分:1)

您可以使用whereHas()

public function getFinished(Step $step) {
    return Survey::whereHas('steps', function($query) use($step) {
        $query->where('id', $step->id)->where('isFinished', 1);
    })->get();
}