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

Laravel: How to merge a Model into another Model

我正在使用 Lumen 创建一个必须处理 2 个实体的 API:GamemasterPlayer。它们实际上都是我的 API 的 User,因为它们必须提供令牌。所以最后,'gamemaster'和'player'只是一个'user'角色。

所以我使用 3 个处理来自数据库的信息的模型来管理它们(为了示例,我保持简单):

所以我的问题是:是否可以将模型 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;

为此使用模型上的关系。

在你的例子中,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也是如此。