首页 文章

Laravel加入Auth表

提问于
浏览
0

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

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

我的 table :

Users: id username iconid avatarid
Icons: id image
Avatars: id image

所以我想做的是:

SELECT icons.image as icon_image, avatars.image as avatar_image FROM users
    LEFT OUTER JOIN icons ON icons.id = users.iconid
    LEFT OUTER JOIN avatars ON avatars.id = users.avatarid

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

谢谢任何回复的人!

1 回答

  • 2

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

    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();
    

相关问题