我的控制器中有以下方法。
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。
帮助某人?
答案 0 :(得分:1)
任何范围方法都接受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。
答案 1 :(得分:0)
试试这个:
$semesters = Semester::where('active','=','1')->orderBy('name')->get();