我目前正在尝试使用 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 上以更多地理解我的意思。
明月笑刀无情
TA贡献1828条经验 获得超4个赞
您可以使用 laravel 范围。与本地范围一样,您可以定义常见的约束集,您可以轻松地在整个应用程序中重复使用这些约束.
在您的情况下,您可以像在模型中定义范围一样使用:
public function scopeAchievementsAvailableToClaim(){ return $query->where('achivement_avilable', true); }
你可以这样使用:
Auth::user()->achievements()->achievementsAvailableToClaim();
- 2 回答
- 0 关注
- 91 浏览
添加回答
举报
0/150
提交
取消