laravel 5.6 usuarios y roles - con tabla Roles

vamos a crear el modelo Role

php artisan make:model Role -m

-m nos crea el archivo de migracion

al que agregaremos algunos campos

Schema::create('roles', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name')->unique();
            $table->string('display_name');
            $table->text('description')->nullable();
            $table->timestamps();
        });
la diferencia entre string y text es la cantidad de caracteres, string solo 255, y text 20mil


php artisan migrate

creamos otra migration para la tabla Users para eliminar el campo role y agregar
uno nuevo llamado role_id (por convencion, singular de la tabla de la tabla a la que
hace referencia seguido del campo clave)

php artisan make:migration add_role_users_table --table=users

Schema::table('users', function (Blueprint $table) {
            //
             $table->integer('role_id');
             $table->dropColumn('role');

        });

vamos a crear una funcion para relacionar User con un Role

public function role(){
        return $this->belongsTo(Role::class);
    }

para luego modificar la condicion en la funcion que verifica los roles

public function hasRoles(array $roles)
    {
        foreach ($roles as $role) {
            if($this->role->name == $role){
                return true;
            }
        }
        return false;
    }

y en la vista users/index.blade.php

<td>{{$user->role->display_name}}</td>

para definir la relacion de muchos usuarios con un Role

vamos al model Role y agregamos la sgt function

 
    public function user(){
    return $this->hasMany('App\User');
    }

como prueba podemos crear el sgt end point, para ver los roles con los usuarios correspondientes

Route::get('roles',  function(){
    return \App\Role::with('user')->get();

// return \App\Role::all();//no te muestra la relacion con usuarios

});





No hay comentarios:

Publicar un comentario

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable