繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM