首页 文章

使用Laravel Eloquent选择多个表

提问于
浏览
1

我有3个表 - 用户,角色和role_user . 每个用户都被分配到role_user表中的角色,角色列表可以在角色表中找到 . 我想选择角色ID为12的所有用户 . 我目前正在使用查询构建器执行此操作,但我需要它以雄辩的格式 . 我对Laravel雄辩并不是很好,我需要帮助才能将查询转换成雄辩的 . 这就是我目前正在做的事情:

$users = DB::table('users')
            ->join('role_user', 'users.id', '=', 'role_user.user_id')
            ->join('roles', 'roles.id', '=', 'role_user.role_id')
            ->where('roles.id', '=', 12)
            ->get();

4 回答

  • 0

    要以雄辩的格式运行相同的数据库查询,您必须执行以下操作:

    • 如果启用了laravel身份验证,您应该创建一个应该使用项目创建的用户模型,您可以在here上阅读更多内容 . 如果没有,你必须创建你的模型 .

    • 要在控制器或类中使用模型,必须在php文件中启用它:

    use App\User;

    • 像这样运行对用户模型的引用 .

    $users = User::join('role_user','users.id', '=', 'role_user.user_id') ->join('roles', 'roles.id', '=', 'role_user.role_id') -> where('roles.id', '=', 12) ->get();

    $ users现在将成为一个集合,并受制于集合中可用的所有优秀方法 .

    我建议花点时间浏览laracast的免费视频教程,以真正了解Model如何与Eloquent一起使用 . 此外,还可以查看开箱即用的Auth功能 . 我倾向于使用Auth对角色进行所有调用 . 希望这可以帮助 .

  • 2

    使用Eloquent,您可以轻松地检索关系数据,并在Laravel 5中使用您的方案示例

    我们有三个型号

    1)用户(有一个role_user)

    2)角色(有很多role_user)

    3)RoleUser(属于用户和角色)

    1)Users.php

    <?php
    
    namespace App\Models;
     use Eloquent;
    
    class Users extends Eloquent{
    
        protected $table = 'users';
    
        public function userrole()
        {
            return $this->hasOne('App\Models\RoleUser');
        }
    
    }
    

    2)Roles.php

    <?php
    
    namespace App\Models;
    
    use Eloquent;
    
    class Roles extends Eloquent
    {
        protected $table = "roles";
    
        public function rolesuser()
        {
            return $this->hasMany('App\Models\RoleUser');
        }
    
    }
    

    2)RoleUser.php

    <?php
    
    namespace App\Models;
     use Eloquent;
    
    class RoleUser extends Eloquent{
    
        protected $table = 'role_user';
    
        public function user()
        {
            return $this->belongsTo('App\Models\Users');
        }
    
        public function role()
        {
            return $this->belongsTo('App\Models\Roles');
        }
    
    }
    

    您需要检查数据库是否与模型中的关系和设置 . 用户在role_user表中有一个角色 . 角色在role_user表中为用户提供了许多角色 . 角色用户属于用户和角色 . 在laravel / database中设置关系后,可以轻松检索相关信息 .

    例如,如果要使用userrole检索用户,则需要编写:

    $users = \App\Models\Users::with(['userrole'])->first();
    

    如果要获取用户角色名称,请执行以下操作:

    $users->userrole->role->rolename; 
    /* here rolename the column name you have in role table for role name*/
    

    Now come to your query: You want to select those users only who has role id 12. It's now becomes simple to write in eloquent format.

    $users = \App\Models\RoleUser::where('role_id', 12)->with(['user', 'role'])->get(); 
    /* Here role_id is the column you have in role_user table as reference for role table */
    

    你可以在这里了解更多:https://laravel.com/docs/5.6/eloquent-relationships

  • 0

    这将为角色ID为12的用户提供:

    User::whereHas( 'roles', function ( $query ) {
                $query->where( 'id', 12 );
            } )->get();
    

    我假设你正确地 Build 了关系 .

    如果你想动态传递$ role_id,那么使用以下命令:

    User::whereHas( 'roles', function ( $query ) use ($role_id) {
                $query->where( 'id', $role_id );
            } )->get();
    
  • 1

    在角色模型中,您应该添加它

    public function users()
    {
        return $this->hasMany('App\Models\User','role_id','id');
    }
    

    在控制器中

    $allusrs = Role::with('users')->where('id','=','12');
    dd($allusrs);
    

相关问题