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));
}
我尝试在 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
.
https://laravel.com/docs/9.x/eloquent-mutators#defining-an-accessor
public function path(): Attribute
{
return new Attribute(fn () => GeneralController::getURL($this));
}