2014-12-04 70 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!

相关问题