在我的Laravel 5.2应用程序中,有以下模型层次结构:
//Model.php:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
abstract class MyModel extends Model {
public function getAllColumnsNames() {
...
}
//Article.php
namespace App\Models;
class Article extends MyModel {
...
}
然后在控制器中,有一个函数将$ item作为参数,$ item的类型为App \ Models \ Article:
//MyController.php
use App\Models\MyModel;
...
public function japi ($item) {
if (! $item instanceof MyModel) {
return [];
} else {
$columns = $item->getAllColumnNames();
}
}
最后一行抛出异常:
Call to undefined method Illuminate\Database\Query\Builder::getAllColumnNames()
我希望这个函数将从MyModel类继承,但事实上它是从Builder类调用的。
如何从控制器中的MyModel调用该函数?
[编辑] 实际上,即使我将getAllColumnNames()函数从MyModel直接移动到Articles类,也会抛出相同的异常。我被卡住了。
答案 0 :(得分:1)
方法名称中有拼写错误。您将方法定义为getAllColumnsNames
,当您尝试访问该方法时,请拨打getAllColumnNames
(请注意Column
是单数)。它应该是:
$columns = $item->getAllColumnsNames();
Laravel Eloquent模型使用__call
魔术方法将任何未定义的方法委托给查询生成器。这就是为什么即使Article::find(1);
方法由Illuminate\Database\Eloquent\Builder
类定义而不是模型定义find
方法也可以使用Builder
的原因,这也是您获取异常的原因Article
课程,而不是<div ng-repeat="section in content">
<section block="section"></section>
</div>
课程。