Laravel方法[hasMany]不存在

时间:2016-04-15 10:46:50

标签: laravel

我有2个控制器和模型:

  1. 用户控制器&模型
  2. Hero Controller&模型
  3. 每个用户都可以拥有无​​限的英雄 - 这意味着他们之间的关系是一对多

    在我的UserController中,我创建了以下方法:

    /**
         * Get the heroes of the user.
         */
        public function heroes()
        {
            return $this->hasMany(Hero::Class);
        }
    

    在我的HeroController中我创建了这个方法:

    /**
     * Get the user that owns the hero.
     */
    public function user()
    {
        return $this->belongsTo(User::class)
    }
    

    将此添加到我的路线文件中:

    Route::get('userHeroes', 'UserController@heroes');
    

    并返回此错误:

    {"error":{"message":"Method [hasMany] does not exist.","status_code":500}}
    

    可能出了什么问题......?

3 个答案:

答案 0 :(得分:2)

控制器只是请求和返回数据之间的委托 - 您告诉它您需要什么,它会找出您想要的内容,然后调用适当的位置来获取内容返回。

另一方面,hasMany()belongsTo()方法是与HeroUser 模型特别相关的逻辑,另一方面。

您需要将heroes()方法移至User模型,因为用户可以拥有多个英雄。对user()模型也需要Hero方法,因为英雄属于用户。

然后在控制器中添加操作调用。例如,让我们说你有一个UserController,它有一个getHeroes()方法。这可能是这样的:

public function getHeroes() {
    $user = auth()->user();
    $heroes = $user->heroes;
    return $heroes;
}

这会将其格式化为JSON。只是一个例子。

但是你可能想要阅读一两个关于这个的教程,因为它是相当基本的东西,并且很早就能很好地掌握它。请不要采取错误的方式 - 如果遇到问题,我们很乐意提供帮助,我认为您可能需要更强大的基础。为此,强烈推荐Laracasts的截屏视频。

答案 1 :(得分:1)

it must be declared in models, not in controllers, hasMany() is a method in eloquent models.

答案 2 :(得分:0)

hasMany和belongsTo方法是雄辩的类方法。 我们在模型中继承了雄辩,以便我们可以使用雄辩的方法功能。

为了使用关系,你必须在各自的模型类中定义关系方法,然后你可以从控制器调用。

请参阅文档Eloquent relationship documentation

希望我已经清除了你的怀疑。

由于