Laravel列出了具有子模型流行度的音乐流派

时间:2016-03-12 19:54:25

标签: mysql laravel model

我有4张桌子:

  1. MusicGenre
  2. Artist
  3. Song
  4. SongInfo
  5. weekly_hitSongInfo表格中的一列。

    MusicGenre与此Artist相关联:

    public function artists()
    {
        return $this->hasMany('App\Models\Artist\ArtistInfo','genre_id','id');
    }
    

    Artist与此Song相关联:

    public function songs()
    {
        return $this->hasMany('App\Models\Song\Songs','artist_id');
    }
    

    SongSongInfo连接如下:

    public function info()
    {
        return $this->hasOne('App\Models\Song\SongsInfo','song_id','id');
    }
    

    查询表格没有问题。

    我的问题是我希望在weekly_hit表中使用SongInfo获得最佳音乐流派。

    编辑:

    我用原始代码解决了这个问题

    "select music_genres.*, 
    sum(distinct song_info.weekly_hit) as song_popularity
    
    from `music_genres` 
    
    left join `artist_info` on
    `music_genres`.`id` = `artist_info`.`genre_id`
    
    left join songs on 
    artist_info.artist_id = songs.artist_id
    
    left join songs_info on 
    songs.id = songs_info.song_id
    
    group by music_genres.name
    
    order by song_popularity DESC
    
    limit 5
    

    但是,我无法获得歌曲。我想从所有返回的音乐类型中获得songs_info表格中的weekly_hit排序的5首歌曲。

    伙计们我还在寻找解决方案吗?

    有人能帮助我吗?

1 个答案:

答案 0 :(得分:0)

您需要使用Eloquent的hasManyThrough()关系来深入到关系链中。