我有以下表格:
用户
游戏
字符
一个用户将有一个活跃的游戏,在一次,并从该游戏,将有一个活跃的字符。
我想在我的身份验证表上执行以下joi:

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

尝试忽略选择*部分。
我想在页面加载后立即在Auth表上执行这些连接,因此我一直在使用我的用户模型执行以下操作:
类User extends雄辩地实现了UserInterface、RemindableInterface{
公共功能游戏(){
return$this->hasOne('game','ID','active_gameid');
}
}
类游戏扩展雄辩{
protected$table=“游戏”;
公共函数字符(){
return$this->hasOne('character','ID','active_charid');
}
}
类字符扩展雄辩{
protected$table=“个字符”;
}
上面的操作不起作用,因为输出以下内容只返回一个空值:
变量转储(Auth::user()->游戏->角色);
我试过做一些显而易见的检查,比如确保数据在表中,等等,一切看起来都很好。
有人能帮我解决我的问题吗?
谢谢您!

最佳答案

你们的关系错了:

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

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

显然它不会调用您的查询,而是调用两个单独的查询:
Auth::user()
  ->game // SELECT * FROM games WHERE ID = ?
  ->character; // SELECT * FROM characters WHERE ID = ?

09-25 18:33
查看更多