[英]Passing argument to function in model
我的控制器中有以下方法。
public function show($semester_name = null)
{
$semester = $this->getSemester($semester_name);
$matches = Match::GetMatches($semester->id);
$semesters = Semester::where('active', 1)->orderBy('name')->get();
return view('entities/match.indexMatched', compact('matches', 'semesters'));
}
在我的模型中,这种方法是:
public function scopeGetMatches($id)
{
$query = "SELECT
some code...
WHERE matches.semester_id = " . $id . "
ORDER BY 2, 3, 5, 6
";
return DB::select(DB::raw($query));
}
但是我得到了错误Object of class Illuminate\\Database\\Eloquent\\Builder could not be converted to string
。
我肯定知道我得到一个有效的$ semester-> id。
帮助别人?
任何范围方法都接受作为Illuminate\\Database\\Eloquent\\Builder
第一个参数实例,因此您的方法应类似于:
public function scopeGetMatches(\\Illuminate\\Database\\Eloquent\\Builder $builder, $id)
基本上,范围方法应修改当前模型查询的状态,因为范围方法与该模型的查询生成器的当前实例之间相互传递,例如:
Posts::where('published', true)->newest()->get()
public function scopeNewest($builder) { $builder->orderBy('created_at', 'DESC'); }
与:
Posts::where('published', true)->orderBy('created_at', 'DESC')->get()
因此,您的实现是错误的,并且只能是静态方法。
您可以在Laravel文档上找到更多信息: https ://laravel.com/docs/5.2/eloquent#query-scopes。
尝试这个 :
$semesters = Semester::where('active','=','1')->orderBy('name')->get();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.