2014-12-04 75 views
0

我試圖添加一個靜態函數到Illuminate\Database\Eloquent\Collection將靜態函數添加到 Illuminate Database Eloquent Collection

我曾嘗試以下:

創建一個類:

class CustomCollection extends \Illuminate\Database\Eloquent\Collection 
{ 
    public static function test() 
    { 
     die('test'); 
    } 
} 

然後,我曾嘗試包括類。

但是,如果沒有運氣,我得到錯誤信息:Call to undefined method Illuminate\Database\Eloquent\Collection::test()

給出的錯誤信息調用User::where('id', 1)->get()->test();

+0

這些方法從來沒有使用你的類。你不能擴展某些東西,然後希望其他東西神奇地使用它。 – 2014-12-04 13:33:36

回答

3

要使用你的收藏,而不是由雄辯提供的一個,加在你的模型的方法:

/** 
* Create a new Eloquent Collection instance. 
* 
* @param array $models 
* @return \Illuminate\Database\Eloquent\Collection 
*/ 
public function newCollection(array $models = array()) 
{ 
    return new Collection($models); 
} 

現在每次:

public function newCollection(array $models = []) 
{ 
    // of course, adjust your namespace accordingly 
    return new CustomCollection($models); 
} 

它將Illuminate\Database\Eloquent\Model類重寫此方法雄辯的查詢返回集合(例如,使用YourModel::all()),將使用自定義集合,並且您添加的方法將可用。

來源:Laravel Docs

+0

正是我需要的。謝謝你@kajetons。 – 2014-12-04 13:46:31

1

因爲我不能使用的評論功能我來回答,雖然我不覺得它應該被標記作爲答案。您的錯誤指出您正在調用Collection :: test()。Collection類中的方法測試不存在!您將CustomCollection擴展爲Collection,並將一個方法添加到CustomCollection而不是Collection!

相關問題