2014-01-24 12 views
0

我想要做的事很簡單,我想。在我的控制器中,我有以下代碼:Laravel +雄辯 - 先傳遞自定義函數

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

它返回一個標準的雄辯集合對象。但是,有時當我檢索類別時,我希望首先以特定方式對它們進行排序。因此,我可以在我的模型中使用如下功能:

Class SiteCategory extends Eloquent { 

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

} 

然後我如何調用此函數?我不明白,我讀過的教程和問題沒有幫助。例如,在this question上如此,他似乎在暗示他可以打電話給他的功能是這樣的:

SiteCategory->mySpecialFunction() 

我不明白這一點?

+0

爲什麼不只是在它們被檢索後對它們進行排序呢?如果通過函數完成排序,它將始終在數據庫獲取之後完成。 –

+0

好的,所以如果我把這個函數放在我的模型中,那麼是否有可能將它鏈接到像siteCategory :: All() - > mySpecialFunction()這樣的雄辯調用上呢還是必須將它聲明爲靜態函數並將其稱爲分別? – Inigo

+0

這個問題有一個使用自定義排序函數的例子:http://stackoverflow.com/questions/15533659/sorting-data-with-eloquent –

回答

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; 
}