我正在构建一个应用程序,在一般公共页面旁边将有一个登录页面和每3个角色级别的3个仪表板版本。
表
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('firstname');
$table->string('surname');
$table->string('username');
$table->string('email')->unique();
$table->string('password', 60);
$table->string('role');
$table->rememberToken();
$table->datetime('created_at');
$table->datetime('updated_at');
});
我有另一张表Roles:
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->string('role_type');
});
关系
Users::hasOne('roles');
Roles::hasMany('users');
基本上在登录功能上我想检查用户的role_type,然后根据角色重定向它们。
我想知道这个表结构和想法是否被正确考虑过。 此外,当用户访问特定路由时,我将使路由在没有用户时显示登录,如果用户登录则显示404/503但与特定role_type不匹配。
谢谢你们
答案 0 :(得分:2)
在您的用户表格而不是您拥有的角色列上,应该是以下两行:
$table->integer('role_id')->unsigned()->nullable();
$table->foreign('role_id')->references('id')->on('roles')->onDelete('set null');
这样做的缺点是它允许' role_id'的空值。用户专栏。它需要这个的原因是处理如果删除分配给用户的角色会发生什么。
但更好的解决方案是使用多对多关系,我个人建议使用Entrust,因为它具有您想要内置的内容,以及您以后可能需要的更多选项。