将参数传递给模型中的函数

时间:2016-02-15 17:11:35

标签: php mysql laravel casting eloquent

我的控制器中有以下方法。

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。

帮助某人?

2 个答案:

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