我想我想做的事情很简单。在我的控制器中,我有代码:
$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()
我不明白吗?
答案 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
参数,它是范围方法的第一个参数,而$query
是Illuminate\Database\Eloquent\Builder
的一个实例,你可以在该函数中使用$this
并且可以像
SiteCategory::mySpecialFunction()->find(1);
在这种情况下,您必须从函数返回$query
以链接其他方法,例如:
public function scopeMySpecialFunction($query, $param1, $param2){
// do something
return $query;
}