我对Laravel很陌生。我仍在尝试学习。我的问题是:
我有3张桌子叫
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模型名),这样您将遇到以下情况:
表格:
现在,您可以重写模型以使其符合新结构,并且也可以使用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] 删除。
我来说两句