Laravel:如何将一个模型合并到另一个模型中

问题描述 投票:0回答:1

我正在使用Lumen创建必须处理2个实体的API:GamemasterPlayer。因为它们必须提供令牌,所以它们实际上都是我的API的User。因此,最后,“游戏管理员”和“玩家”只是一个“用户”角色。

因此,我使用3种模型来管理它们,这些模型处理来自数据库的信息(在示例中,我保持简单):

  • User
    • id
    • username
    • email
    • password
  • Gamemaster
    • user_id(用户ID作为外键)
    • created_games
    • ...
  • Player
    • user_id(用户ID作为外键)
    • registered_games
    • ...

所以我的问题是:是否可以将模型User合并为GamemasterPlayer?这样我就可以使用Gamemaster::find($id)->email来获取游戏管理员的电子邮件。有什么办法还是我应该每次都在两个模型中搜索以获取所有信息:

$user = User::find($id);
$userAsGamemaster = Gamemaster::where('user_id', '=', $id)->first();

$gamemasterName = $user->username;
$gamemasterEmail = $user->email;
$gamemasterCreatedGame = $userAsGamemaster->created_games;
php laravel lumen
1个回答
1
投票

为此在模型上使用关系。

在您的情况下,Gamemaster和Player都属于用户,因此您可以按以下方式在Gamemaster模型和Player模型上定义关系:->

public function user(){
  return this->belongsTo('App\User', 'your_foregin_key', 'Your_local_key');
}

现在您可以按以下方式获取电子邮件:->

$userAsGamemaster = Gamemaster::where('user_id', '=', $id)->first();
$email = $userAsGamemaster->user->email;

或使用:

Gamemaster::find($id)->user->email;

就这些。

© www.soinside.com 2019 - 2024. All rights reserved.