laravel:模型中的函数必须返回一个关系实例

Ali*_*Ali 32 laravel laravel-5.5

我尝试在laravel上为模型构建路径

我在我的模型中创建了一个函数:

public function path()
{
    return App\Helper\GeneralController::getURL($this);
}
Run Code Online (Sandbox Code Playgroud)

通过dd(App\Helper\GeneralController::getURL($this))测试,我得到了正确的答案.(输出是一个URL)

但是通过调用查看:$article->path 我收到此错误:

App\Article:: path must return a relationship instance.
Run Code Online (Sandbox Code Playgroud)

怎么了?

Ale*_*nin 63

你需要打电话给它:

$article->path()
Run Code Online (Sandbox Code Playgroud)

当你这样做时$article->path,你正试图使用​​你没有的雄辩关系.

  • 我实际上意识到了这一点,但只是没有注意到我没有在我的代码行中添加“()”。因此,它试图访问一个属性而不是执行一个方法。我就像“wtf我做错了什么......”:')。谢谢你让我看到了曙光。 (3认同)

pwy*_*wyg 14

我知道这已经得到了回答和接受。但是,如果 OP 确实想使用属性访问器而不是方法,请使用 Laravel 的“get{property name}Attribute”语法来创建自定义属性。

下面是这个特定案例的样子:

public function getPathAttribute()
{
    return App\Helper\GeneralController::getURL($this);
}
Run Code Online (Sandbox Code Playgroud)

使用这种方法,“路径”现在可以作为属性调用,并且不会使用以下语法解析为关系:

$article->path;
Run Code Online (Sandbox Code Playgroud)


小智 7

你称之为关系。

$article->path
Run Code Online (Sandbox Code Playgroud)

要调用该方法,请使用“()”,如下所示,

$article->path()
Run Code Online (Sandbox Code Playgroud)


Ali*_*Ali 7

当我忘记在模型中的关系之前写return时,我遇到了这个错误!
立即查看!


Nik*_*aut 6

path() 是方法不是您需要作为方法调用的对象元素

$article->path();
Run Code Online (Sandbox Code Playgroud)