如何在Eloquent中查询这种关系?

时间:2016-03-10 13:02:50

标签: php sql laravel eloquent

模式如下:

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');
}

但是,以上结果将返回如下结果,因为每个音轨最多可以有三个节拍: Result

如果您需要了解更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:2)

你是正确的,但你需要更多的代码。 首先,您可以将Genre的函数名称更改为beats() - 仅用于约定,因为它将返回多个寄存器:P。 其次,通过hasManyThrough,您将获得与流派相关的所有Beats(通过Track)。 然后,您可以访问与Beat相关的Freestyles:

  • 在Beat和Freestyle模型中创建关系:

节拍:

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');
}
  • 获取与Likes相关的Freestyles:
  

具有( 'freestyles.likes')

所以,你可以做这样的功能(流派模型):

public function beatsWithLikes()
{
    return $this->beats()->has('freestyles.likes');
}

我希望它可以帮到你。