首页 文章

Laravel将两个模型加入到User模型中

提问于
浏览
2

我有以下表格:

用户游戏角色

用户将同时拥有一个活动游戏,并且从该游戏中将具有一个活动角色 .

我想在我的身份验证表上执行以下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模型执行以下操作:

class User extends Eloquent implements UserInterface, RemindableInterface {

    public function game() {
        return $this->hasOne('game', 'ID', 'active_gameid');
    }

}

class game extends Eloquent {

    protected $table = "games";

    public function character() {
        return $this->hasOne('character', 'ID', 'active_charid');
    }

}

class character extends Eloquent {

    protected $table = "characters";

}

以上不起作用输出以下只返回一个NULL值:

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

我试图进行明显的检查,例如确保数据在表格中等等,而且一切似乎都很好 .

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

谢谢!

1 回答

  • 1

    你的关系错了:

    // 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 = ?
    

相关问题