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 表的主要内容,如果未能解决你的问题,请参考以下文章