如何解决使用Laravel Relationship调用Model方法
我当前正在尝试使用Laravel Relationships访问使用User模型的成就模型,我使用以下关系代码:
public function achievements()
{
return $this->hasMany('App\Models\User\Achievement');
}
我可以轻松地进行一些雄辩的查询,但是我无法访问在此创建的任何方法,也无法访问此方法:
class Achievement extends Model
{
public function achievementsAvailableToClaim(): int
{
// Not an eloquent query
}
}
使用以下代码:
Auth::user()->achievements()->achievementsAvailableToClaim();
我认为我以错误的方式使用了Laravel函数,因为我在不使用关系的情况下尝试了其他操作:
public function achievements()
{
return new \App\Models\User\Achievement;
}
但这会带来性能问题,因为每次我在用户模型中使用Achievements函数时,都会创建一个新的类实例吗?
我尝试做的正确方法是什么?
解决方法
您可以使用laravel scopes。就像本地作用域一样,您可以定义常见的约束集,以方便在整个应用程序中重复使用。
在您的情况下,您可以像在模型中定义范围这样使用
:public function scopeAchievementsAvailableToClaim()
{
return $query->where('achivement_avilable',true);
}
您可以像这样使用它:
Auth::user()->achievements()->achievementsAvailableToClaim();
,
它不起作用,因为您雄辩的关系是hasMany,因此它返回一个集合。您不能从集合中调用相关的模型函数。
您可以将var丢弃在修补程序上,以了解更多我的意思。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。