Laravel: 如何将一个模型合并到另一个模型中
Laravel: How to merge a Model into another Model
我正在使用 Lumen 创建一个必须处理 2 个实体的 API:Gamemaster
和 Player
。它们实际上都是我的 API 的 User
,因为它们必须提供令牌。所以最后,'gamemaster'和'player'只是一个'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 都属于 User,所以你可以定义 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;
就这些了。
好的。我在回答中写下我们在评论中讨论的内容。
无法回答合并两个模型的问题,但您可以在模型中定义关系来实现您想要的 Gamemaster 和 Player:
public function user()
{
return $this->belongsTo(User::class);
}
所以,如果您在 $id
变量中有 User
型号 ID,您可以这样做:
$gamemaster = Gamemaster::where('user_id', $id)->first();
$gamemasterName = $gamemaster->user->username;
$gamemasterEmail = $gamemaster->user->email;
$gamemasterCreatedGame = $gamemaster->created_games;
如果在 $id
变量中你有 Gamemaster
型号 ID,你可以这样做:
$gamemaster = Gamemaster::find($id);
$gamemasterName = $gamemaster->user->username;
$gamemasterEmail = $gamemaster->user->email;
$gamemasterCreatedGame = $gamemaster->created_games;
Player
也是如此。
我正在使用 Lumen 创建一个必须处理 2 个实体的 API:Gamemaster
和 Player
。它们实际上都是我的 API 的 User
,因为它们必须提供令牌。所以最后,'gamemaster'和'player'只是一个'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 都属于 User,所以你可以定义 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;
就这些了。
好的。我在回答中写下我们在评论中讨论的内容。
无法回答合并两个模型的问题,但您可以在模型中定义关系来实现您想要的 Gamemaster 和 Player:
public function user()
{
return $this->belongsTo(User::class);
}
所以,如果您在 $id
变量中有 User
型号 ID,您可以这样做:
$gamemaster = Gamemaster::where('user_id', $id)->first();
$gamemasterName = $gamemaster->user->username;
$gamemasterEmail = $gamemaster->user->email;
$gamemasterCreatedGame = $gamemaster->created_games;
如果在 $id
变量中你有 Gamemaster
型号 ID,你可以这样做:
$gamemaster = Gamemaster::find($id);
$gamemasterName = $gamemaster->user->username;
$gamemasterEmail = $gamemaster->user->email;
$gamemasterCreatedGame = $gamemaster->created_games;
Player
也是如此。