我正在使用Lumen创建必须处理2个实体的API:Gamemaster
和Player
。因为它们必须提供令牌,所以它们实际上都是我的API的User
。因此,最后,“游戏管理员”和“玩家”只是一个“用户”角色。
因此,我使用3种模型来管理它们,这些模型处理来自数据库的信息(在示例中,我保持简单):
User
:id
username
email
password
Gamemaster
:user_id
(用户ID作为外键)created_games
Player
:user_id
(用户ID作为外键)registered_games
所以我的问题是:是否可以将模型User
合并为Gamemaster
和Player
?这样我就可以使用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;
为此在模型上使用关系。
在您的情况下,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;
就这些。