Laravel 加入 Auth 表

Posted

技术标签:

【中文标题】Laravel 加入 Auth 表【英文标题】:Laravel Join On Auth Table 【发布时间】:2015-03-10 10:08:11 【问题描述】:

我使用的是 Laravel 提供的默认身份验证系统。但是,我想在我的 Auth 表(用户)上连接两个表(执行两个内部连接)。到目前为止,我已经在两个模型之间创建了两个关系,这可以正常工作并获得我想要的数据,但是当我事后认为在表上执行两个连接会更有效时,它会执行两个额外的查询。

我不知道该怎么做是在用户模型上执行联接,这样我就不必创建新查询(而是使用通过调用 Auth::user() 创建的查询)。

我的桌子:

 用户:id 用户名 iconid 头像
 图标:id 图片
 头像:id 图片

所以我想做的是:

 选择 icons.image 作为 icon_image,avatars.image 作为 avatar_image FROM users
    icons.id = users.iconid 上的左外连接图标
    左外连接头像 ON avatars.id = users.avatarid

这可能吗?我是否只需要覆盖我的用户模型中的一个方法,以便 Auth::user() 运行上述查询?

感谢所有回复的人!

【问题讨论】:

【参考方案1】:

把它放在你的用户模型中:

public function icon()

    return $this->hasOne('Icon');

public function avatar()

    return $this->hasOne('Avatar');

然后像这样获取用户:

$user = User::with(['icon', 'avatar'])->find(1);

然后你可以像这样访问图标和头像:

$user->icon

$user->avatar

要使用联接执行此操作,您可以这样做:

$user_id = 1;
DB::table('users')
->join('icons', 'icons.id', '=', 'users.icon_id')
->join('avatars', 'avatars.id', '=', 'users.avatar_id')
->select('users.name', 'icons.path', 'avatars.path')
->where('users.id', $user_id)
->first();

【讨论】:

这几乎是我所做的,只是它创建了两个额外的查询,而不是将表连接到当前的查询。所以 Auth::user()->icon 会起作用,但它会创建我试图避免的两个额外查询。我只想 LEFT OUTER 将表加入到 Auth 表中。我可以在 User 模型中创建一个单独的方法,但这不会影响 Auth::user() 调用。感谢您的回复:) 添加了一个连接示例 无论如何操作 Auth::user() 调用?我将把 SQL 代码放在哪里以便 Auth::user() 运行连接 SQL 代码?我需要覆盖 User 模型中的方法吗?

以上是关于Laravel 加入 Auth 表的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 Auth - 用户自定义表

无法更改 Laravel 的 Auth 表

Laravel Auth 更改表名

Laravel 雄辩加入 ajax

Laravel 5.6 对数据库中不同表的身份验证

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