为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Laravel 关系调用模型方法

使用 Laravel 关系调用模型方法

PHP
达令说 2023-12-15 15:19:46
我目前正在尝试使用 Laravel 关系来使用用户模型访问我的成就模型,我使用以下关系代码: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;}但这会产生性能问题,因为每次在用户模型中使用成就函数时,我都会创建一个新的类实例吗?我想做的事情的正确方法是什么?
查看完整描述

2 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

它不起作用,因为你的雄辩关系是一个 hasMany 所以它返回一个集合。您无法从集合中调用相关模型函数。

你可以把它转储到 Tinker 上以更多地理解我的意思。


查看完整回答
反对 回复 2023-12-15
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

您可以使用 laravel 范围。与本地范围一样,您可以定义常见的约束集,您可以轻松地在整个应用程序中重复使用这些约束.

在您的情况下,您可以像在模型中定义范围一样使用:

public function scopeAchievementsAvailableToClaim(){
  return $query->where('achivement_avilable', true);
}

你可以这样使用:

Auth::user()->achievements()->achievementsAvailableToClaim();


查看完整回答
反对 回复 2023-12-15
  • 2 回答
  • 0 关注
  • 49 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信