Laravel 通过中间关系访问模型

Laravel 通过中间关系访问模型,laravel,eloquent,Laravel,Eloquent,我想使用赠品模型检索模型游戏 giveaway: id giveaway_games: id gameID giveawayID games: id name 阅读文档摘要时,我明白我必须使用hasManyThrough关系,但我不确定我是否正确使用了它 public function gamesNames(){ return $this->hasManyThrough(Games::class, GiveawayGames::class, 'gameID', 'id');

我想使用
赠品
模型检索模型
游戏

giveaway:
id

giveaway_games:
id
gameID
giveawayID

games:
id
name
阅读文档摘要时,我明白我必须使用
hasManyThrough
关系,但我不确定我是否正确使用了它

public function gamesNames(){
    return $this->hasManyThrough(Games::class, GiveawayGames::class, 'gameID', 'id');
}

任何帮助都将不胜感激

游戏
表需要一个外键来
赠品\u游戏
。在下面的示例中,我使用外键字段的
\u id
后缀坚持使用Laravel default

class GiveAway 
{
    public function games()
    {
        return $this->hasManyThrough(Games::class, GiveawayGames::class);
    }
}
作为助记符,您可以将
hasManyThrough
读取为:

通过赠品游戏,赠品有很多游戏

或者更抽象一些:

模型有许多参数1到参数2


模式

class GiveAway 
{
    public function games()
    {
        return $this->hasManyThrough(Games::class, GiveawayGames::class);
    }
}
赠品:

  • 身份证
  • 名字
赠品游戏:

  • 身份证
  • 赠品
游戏:

  • 身份证
  • 名字
  • 赠送游戏\u id

外键自定义名称的注意事项:

如果您被迫使用
giveawayID
而不是
giveawayID
自定义外键的名称,则可以将自定义名称指定为
hasManyThrough()方法的第三个参数

return $this->hasManyThrough(Games::class, GiveawayGames::class, 'giveawayID');
如果您另外自定义了
id
字段的名称,可以在第四个参数中指定
uuid

return $this->hasManyThrough(Games::class, GiveawayGames::class, 'giveawayID', 'uuid');

正是我想要的。只是一个简短的提示,我认为这将改善答案。我用过:
return$this->hasManyThrough(Games::class,GiveawayGames::class,'giveawayID','id')我认为这将有助于未来的人有同样的问题,我注意到。你是不是被强迫(通过名称模式或其他方式)不遵守Laravels命名约定?我在其他项目中使用了一种不好的做法,我摆脱了这种做法。特别是在拉雷维尔,因为他们有一个惯例