我有两个模型:
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 );
}
答案 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();
}