Gea*_*rtz 9 php join laravel eloquent
我对Laravel很新.我还在努力学习它.我的问题是:
我有3个名为的表
GAME_PLATFORMS

我有3个模型用于那些表
游戏模型
class Game extends Eloquent
{
protected $table = 'games';
public function platforms()
{
return $this->hasManyThrough('GamePlatform','GameOptions','id','game_id');
}
}
Run Code Online (Sandbox Code Playgroud)GamePlatform模型
class GamePlatform extends Eloquent
{
protected $table = 'game_platform';
}
Run Code Online (Sandbox Code Playgroud)GameOption模型
class GameOptions extends Eloquent
{
protected $table = 'game_options';
}
Run Code Online (Sandbox Code Playgroud)所以,当我这样做
$game = Game::find(1)->platforms;
Run Code Online (Sandbox Code Playgroud)
它只显示,
{"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}
Run Code Online (Sandbox Code Playgroud)
但我需要这些ID的游戏名称和平台名称.问题是,我只想以雄辩的方式做到这一点.我可以使用"DB"或oldschool 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');
}
}
Run Code Online (Sandbox Code Playgroud)
注意:game_option除非在数据透视表上存储额外数据,否则不必为数据透视表()建模.
现在你应该很好地获得给定游戏的所有选项:
$options = Game::find(1)->options;
Run Code Online (Sandbox Code Playgroud)
或者如果你需要获得所有平台(虽然我试图在这里推断你的代码对选项和平台的意义):
$platforms = Game::find(1)->options()->whereOption('platform')->get();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30842 次 |
| 最近记录: |