【问题标题】:Laravel joining two models to User modelLaravel 将两个模型加入用户模型
【发布时间】:2015-03-10 04:32:46
【问题描述】:

我有以下表格:

用户 游戏 字符

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

我想在我的身份验证表上执行以下 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 {

    公共功能游戏(){
        return $this->hasOne('game', 'ID', 'active_gameid');
    }

}

类游戏扩展 Eloquent {

    受保护的$table =“游戏”;

    公共功能字符(){
        return $this->hasOne('character', 'ID', 'active_charid');
    }

}

类字符扩展 Eloquent {

    受保护的 $table = "字符";

}

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

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

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

有人对我哪里出错有任何帮助吗?

谢谢!

【问题讨论】:

  • 你自己试过 var_dumping Auth::user()Auth::user()->game 吗?

标签: php mysql laravel eloquent relationships


【解决方案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 = ?

【讨论】:

  • 看起来User 包含game id (users.active_gameid),game 包含character id (games.active_charid),所以不应该是用户属于游戏,游戏属于角色?
  • @patricus 是的!我没有仔细阅读全文。
  • 感谢您的回复!不幸的是,它似乎不起作用。我的游戏模型:class Game extends Eloquent { protected $table = "games"; public function character() { return $this->belongsTo('characters', 'active_charid', 'ID'); } } class characters extends Eloquent { }
  • 解释 doesn't work 并使用您拥有的表格编辑您的问题。
  • 添加,为格式化道歉......所以新手在这里:(class Game extends Eloquent { protected $table = "games"; public function character() { return $this->belongsTo('characters', 'active_charid', 'ID'); } } class characters extends Eloquent { }
猜你喜欢
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多