Laravel 将两个模型加入用户模型

Posted

技术标签:

【中文标题】Laravel 将两个模型加入用户模型【英文标题】:Laravel joining two models to User model 【发布时间】: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 吗? 【参考方案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

以上是关于Laravel 将两个模型加入用户模型的主要内容,如果未能解决你的问题,请参考以下文章

laraver框架学习------工厂模型填充测试数据

在 laravel 中,我需要加入模型并仍然使用第一个模型上的方法

Laravel 加入 Auth 表

Laravel 5 - 将用户模型移动到应用程序/模型导致自动加载问题

如何通过 laravel eloquent 模型 Laravel 5 加入三个表

数据库中的计算字段 - Laravel