Laravel雄辩的加入

盖茨

我对Laravel很陌生。我仍在尝试学习。我的问题是:

我有3张桌子叫

  • 游戏
  • game_options
  • game_platforms

    在此处输入图片说明

我有那些表的3个模型

  • 游戏模型

    class Game extends Eloquent
    {
        protected $table = 'games';
    
        public function platforms()
        {
            return $this->hasManyThrough('GamePlatform','GameOptions','id','game_id');
        }
    }
    
  • GamePlatform模型

    class GamePlatform extends Eloquent
    {
        protected $table = 'game_platform';
    }
    
  • GameOption模型

    class GameOptions extends Eloquent
    {
        protected $table = 'game_options';
    }
    

所以当我这样做

$game = Game::find(1)->platforms;

它只显示,

{"id":1,"platform_id":20,"game_id":1}
{"id":1,"platform_id":21,"game_id":1}
{"id":1,"platform_id":22,"game_id":1}
{"id":1,"platform_id":23,"game_id":1}
{"id":1,"platform_id":24,"game_id":1}

但是我需要带有这些ID的游戏名称和平台名称。问题是,我只想雄辩地做到这一点。我可以使用“ DB”或老式SQL,但是我想了解这种方式是否可行。

我也在寻找有关laravel的更好的文档/书籍。我读的大部分内容只是介绍了laravel或对我来说太先进了。

亚历克斯

我早些时候对此发表了评论,但是现在我很确定这是您正在寻找的答案:您应该使用belongsToMany而不是hasManyThrough因此,首先,我是否建议您重命名表和模型以遵循Laravel的约定(复数snake_case表名,奇数snake_case字母顺序枢轴表名,奇异的StudlyCaps模型名),这样您将遇到以下情况:

表格:

  • 游戏
    • ID
    • 姓名
  • game_option
    • ID
    • game_id
    • option_id
  • 选项
    • ID
    • 选项
    • 姓名

现在,您可以重写模型以使其符合新结构,并且也可以使用belongsToMany关系:

class Game extends Eloquent
{
    public function platforms()
    {
        return $this->belongsToMany('Option');
    }
}

class Option extends Eloquent
{
    public function platforms()
    {
        return $this->belongsToMany('Game');
    }
}

注意:game_option除非您在数据透视表上存储了额外的数据,否则不必对数据透视表(建模

现在您应该可以很好地获得给定游戏的所有选项:

$options = Game::find(1)->options;

或者,如果您需要获得所有平台(尽管我试图在此处推断有关选项和平台的代码的含义):

$platforms = Game::find(1)->options()->whereOption('platform')->get();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章