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

laravel: function in model must return a relationship instance

我尝试在 laravel

上为模型构建路径

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

public function path()
{
    return App\Helper\GeneralController::getURL($this);
}

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

但鉴于调用:$article->path 我收到此错误:

App\Article:: path must return a relationship instance.

怎么了?

您需要调用它:

$article->path()

当您执行 $article->path 时,您正在尝试使用您没有的 Eloquent 关系。

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

$article->path();

你正在调用一段关系。

$article->path

要调用该方法,请使用“()”,就像这样,

$article->path()

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

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

public function getPathAttribute()
{
    return App\Helper\GeneralController::getURL($this);
}

使用这种方法 "path" 现在可以作为属性调用,不会使用以下语法解析为关系:

$article->path;

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

Laravel 9 引入了一种使用 Illuminate\Database\Eloquent\Casts\Attribute.

在模型中定义 accessors/mutators 的新方法

https://laravel.com/docs/9.x/eloquent-mutators#defining-an-accessor

public function path(): Attribute
{
    return new Attribute(fn () => GeneralController::getURL($this));
}