我有以下表格:
用户游戏字符
用户一次将有一个活动游戏,并且从该游戏中,将有一个活动角色。
我想在我的身份验证表上执行以下 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 = ?