使用 Laravel 关系调用模型方法

我目前正在尝试使用 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;

}

但这会产生性能问题,因为每次在用户模型中使用成就函数时,我都会创建一个新的类实例吗?


我想做的事情的正确方法是什么?


达令说
浏览 52回答 2
2回答

凤凰求蛊

它不起作用,因为你的雄辩关系是一个 hasMany 所以它返回一个集合。您无法从集合中调用相关模型函数。你可以把它转储到 Tinker 上以更多地理解我的意思。

明月笑刀无情

您可以使用 laravel 范围。与本地范围一样,您可以定义常见的约束集,您可以轻松地在整个应用程序中重复使用这些约束.在您的情况下,您可以像在模型中定义范围一样使用:public function scopeAchievementsAvailableToClaim(){   return $query->where('achivement_avilable', true); }你可以这样使用:Auth::user()->achievements()->achievementsAvailableToClaim();
打开App,查看更多内容
随时随地看视频慕课网APP