我试图将静态函数添加到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 :(得分:3)
要使用您的集合而不是Eloquent提供的集合,请在模型中添加方法:
public function newCollection(array $models = [])
{
// of course, adjust your namespace accordingly
return new CustomCollection($models);
}
它将在Illuminate\Database\Eloquent\Model
class:
/**
* Create a new Eloquent Collection instance.
*
* @param array $models
* @return \Illuminate\Database\Eloquent\Collection
*/
public function newCollection(array $models = array())
{
return new Collection($models);
}
现在,每当Eloquent查询返回集合时(例如,使用YourModel::all()
),将使用自定义集合,并且您添加的方法将可用。
来源:Laravel Docs
答案 1 :(得分:1)
由于我不能使用评论功能,我必须回答,虽然我不觉得它应该被标记为答案。您的错误指出您正在调用Collection :: test()。集合类中的方法测试不存在!您使用Collection扩展了CustomCollection,并将一个方法添加到CustomCollection而不是Collection!