模式如下:
Likes
id (pk)
UserID
FreestyleID
Freestyle:
id (pk)
BeatId
Beat:
id (pk)
trackId
Track:
id (pk)
GenreId
Genre:
id (pk)
Title
我真的希望通过他们喜欢的类型ID获得Freestyles的集合。我尝试过很多事情,包括:
Genre model:
public function beat()
{
return $this->hasManyThrough('App\Beat', 'App\Track', 'GenreId', 'TrackId');
}
但是,以上结果将返回如下结果,因为每个音轨最多可以有三个节拍:
如果您需要了解更多信息,请与我们联系。
答案 0 :(得分:2)
你是正确的,但你需要更多的代码。 首先,您可以将Genre的函数名称更改为beats() - 仅用于约定,因为它将返回多个寄存器:P。 其次,通过hasManyThrough,您将获得与流派相关的所有Beats(通过Track)。 然后,您可以访问与Beat相关的Freestyles:
节拍:
public function freestyles()
{
return $this->hasMany('App\Freestyle');
}
的FreeStyle:
public function beat()
{
return $this->belongsTo('App\Beat');
}
public function likes()
{
return $this->hasMany('App\Like');
}
具有( 'freestyles.likes')
所以,你可以做这样的功能(流派模型):
public function beatsWithLikes()
{
return $this->beats()->has('freestyles.likes');
}
我希望它可以帮到你。