Laravel将两个模型连接到用户模型


Laravel joining two models to User model

我有以下表格:

用户游戏字符

用户一次将有一个活动游戏,并且从该游戏中,将有一个活动角色。

我想在我的身份验证表上执行以下 joi:

SELECT * FROM users 
LEFT OUTER JOIN games ON games.ID = users.active_gameid
LEFT OUTER JOIN characters ON characters.ID = games.active_charid

尝试忽略 SELECT * 部分。

我想在页面加载后立即在我的 Auth 表上执行这些联接,因此我一直在使用我的用户模型执行以下操作:

类 User extensions Eloquent 实现 UserInterface, RemindableInterface {    公共函数游戏() {        返回 $this->hasOne('game', 'ID', 'active_gameid');    }}类游戏扩展雄辩{    受保护$table ="游戏";    公共函数字符() {        返回 $this->hasOne('字符', 'ID', 'active_charid');    }}类字符扩展 雄辩 {    受保护$table ="字符";}

以上不起作用,因为输出以下内容仅返回一个 NULL 值:

var_dump(Auth::user()->game->character);

我尝试进行明显的检查,例如确保数据在表中等等,一切似乎都很好。

有人对我出错的地方有任何帮助吗?

谢谢!

你们的关系是错误的:

// User model
public function game()
{
  return $this->belongsTo('Game', 'active_gameid', 'ID');
}
// Game model
public function character()
{
  return $this->belongsTo('Character', 'active_charid', 'ID');
}

显然,它不会调用您的查询,而是调用 2 个单独的查询:

Auth::user()
  ->game // SELECT * FROM games WHERE ID = ?
  ->character; // SELECT * FROM characters WHERE ID = ?