Laravel + Eloquent - 首先通过自定义功能

时间:2014-01-24 16:06:51

标签: laravel eloquent

我想我想做的事情很简单。在我的控制器中,我有代码:

$list = SiteCategory::where('type','=','A')->get();

返回标准的eloquent集合对象。但是,有时当我检索类别时,我希望首先以特定方式对它们进行排序。所以我可以在我的模型中使用一些函数:

Class SiteCategory extends Eloquent {

    public function mySpecialFunction(){
         // retrieve all categories, manipulate them in some way and return.
    }

}

我如何调用此功能?我不明白,我读过的教程和问题没有帮助。例如,在SO上的this question中,他似乎暗示他可以调用他的函数:

SiteCategory->mySpecialFunction()

我不明白吗?

1 个答案:

答案 0 :(得分:0)

您可以在scope内使用Model方法

Class SiteCategory extends Eloquent {

    public function scopeMySpecialFunction($query){
        // retrieve all categories, manipulate them in some way and return.
    }

}

然后你可以调用这个函数,像普通的内置函数,如

SiteCategory::mySpecialFunction();

如果你想将任何参数传递给这个函数,那么你可以添加像这样的参数

public function scopeMySpecialFunction($query, $param1, $param2){
    // retrieve all categories, manipulate them in some way and return.
}

注意第一个$query参数,它是范围方法的第一个参数,而$queryIlluminate\Database\Eloquent\Builder的一个实例,你可以在该函数中使用$this并且可以像

这样的连锁方法
SiteCategory::mySpecialFunction()->find(1);

在这种情况下,您必须从函数返回$query以链接其他方法,例如:

public function scopeMySpecialFunction($query, $param1, $param2){
    // do something
    return $query;
}