我有2个控制器和模型:
每个用户都可以拥有无限的英雄 - 这意味着他们之间的关系是一对多。
在我的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}}
可能出了什么问题......?
答案 0 :(得分:2)
控制器只是请求和返回数据之间的委托 - 您告诉它您需要什么,它会找出您想要的内容,然后调用适当的位置来获取内容返回。
另一方面,hasMany()
和belongsTo()
方法是与Hero
和User
模型特别相关的逻辑,另一方面。
您需要将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
希望我已经清除了你的怀疑。
由于