【发布时间】:2015-12-07 10:26:17
【问题描述】:
我刚刚建立了一个新模型,我正在尝试调用我从新控制器内部编写的自定义写入静态方法来匹配模型:
<?php
class NewModelWebController extends AjaxController {
public function newModelView() {
$loggedUser = Auth::user();
$data['user'] = $loggedUser;
$data['allDetails'] = NewModel::getFullWithDetails($loggedUser->user_id);
return View::make('webApp::new-model.view', $data);
}
}
这里是模型类内部的方法定义(php声明前没有空格):
<?php
class NewModel extends Eloquent {
protected $table = 'new_models';
protected $primaryKey = 'new_model_id';
public static function getFullWithDetails($userId) {
return 1; // doesn't matter what I return -- the problem still happens
}
}
返回的错误如下:
Call to undefined method Illuminate\Database\Query\Builder::getFullWithDetails()
当我拨打NewModel::find(1); 之类的电话时,它可以正常工作,但是一旦我尝试对我编写的方法进行调用,它就不起作用了。
我尝试了以下所有命令,但均未成功:
-
composer update composer dump-autoloadcomposer clear-cachechown -R www-data:www-data ./theProjectFile
感谢您的想法。
【问题讨论】:
-
如何在模型中调用函数?
-
您尝试调用静态方法的
NewModel的use语句是什么样的? -
我已经更新了问题,但是对方法的调用发生在控制器类内部。就像我之前说的,
NewModel::find(1)在该控制器中调用时会起作用,但我的自定义方法不起作用。至于use语句,在调用它的控制器类中没有这样的语句。我能想到的唯一一件事是,如果在继承/包含链层次结构的进一步向上存在某种use语句,我无法从我正在调用的控制器中看到。但我也没有在其他类似的控制器中看到任何use或include语句。 @菲尔 -
我不知道 Laravel,但我猜我会说它将
Builder类注册为模型符号。我会尝试使用完整的类名,例如\Namespace\Path\To\NewModel::getFullWithDetails()。不过在那之后你很有可能会遇到其他问题。 -
@phil 我绝对同意这种说法,但我不确定它在这种情况下的适用性如何。 Composer 确实在自动加载文件中映射了类,因此问题似乎不存在。不过,这很奇怪,因为我可以很好地调用其他模型。只是这个新模型给我带来了问题,所以很明显它没有被包含在某个地方。
标签: php laravel laravel-4 eloquent