Model Laravel 5.1雄辩的关系和认证

Model Laravel 5.1雄辩的关系和认证,model,foreign-keys,eloquent,foreign-key-relationship,laravel-5.1,Model,Foreign Keys,Eloquent,Foreign Key Relationship,Laravel 5.1,我有以下表格: public function up() { Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('first_name'); $table->string('last_name'); $table->string('email')->uniq

我有以下表格:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('first_name');
        $table->string('last_name');
        $table->string('email')->unique();
        $table->string('password', 60);
        $table->rememberToken();
        $table->timestamps();
    });
}


public function up()
{
    Schema::create('user_profiles', function (Blueprint $table) {
        $table->integer('user_id')->unsigned()->primary();
        $table->timestamp('start_dt');
        $table->timestamp('end_dt')->nullable();
        $table->integer('dept_id')->unsigned();
        $table->string('gravatar')->nullable();
        $table->timestamps();

        $table->foreign('user_id')
            ->references('id')
            ->on('users')
            ->onDelete('cascade');

        $table->foreign('dept_id')
            ->references('id')
            ->on('departments');
    });
}


public function up()
{
    Schema::create('departments', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name')->index();
        $table->integer('organisation_id')->unsigned();
        $table->integer('manager_id')->unsigned();
        $table->timestamps();

        $table->foreign('organisation_id')
            ->references('id')
            ->on('organisations')
            ->onDelete('cascade');

        $table->foreign('manager_id')
            ->references('id')
            ->on('users');
    });
}


public function up()
{
    Schema::create('leave_requests', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->integer('leave_type_id')->unsigned();
        $table->timestamp('from_dt');
        $table->timestamp('to_dt');
        $table->integer('status_id')->unsigned()->default(1); // pending
        $table->integer('actioned_by_id')->unsigned();
        $table->timestamps();

        $table->foreign('user_id')
            ->references('id')
            ->on('users')
            ->onDelete('cascade');

        $table->foreign('leave_type_id')
            ->references('id')
            ->on('leave_types');

        $table->foreign('status_id')
            ->references('id')
            ->on('status_types');

        $table->foreign('actioned_by_id')
            ->references('id')
            ->on('users');
    });
}

public function up()
{
    Schema::create('roles', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name')->unique();
        $table->timestamps();
    });
}

public function up()
{
    Schema::create('role_user', function (Blueprint $table) {
        $table->integer('role_id')->unsigned();
        $table->integer('user_id')->unsigned();
        $table->primary(array('role_id', 'user_id'));

        $table->foreign('role_id')
            ->references('id')
            ->on('roles');

        $table->foreign('user_id')
            ->references('id')
            ->on('users')
            ->onDelete('cascade');
    });
}
我有role\u用户关系,因此我可以在站点管理员和普通用户之间进行身份验证,因此我创建了一个单独的user\u profiles表 存储一般用户信息,因为站点管理员不一定共享相同的属性,即管理员不属于某个部门等

我的问题是,在用户模型和请求模型之间建立雄辩关系的正确方法是什么。我是否定义了这种关系 在用户模型中:

class User extends Model implements AuthenticatableContract,  CanResetPasswordContract {

    public function leaveRequests()
    {
        return $this->hasMany('App\LeaveRequest');

    }
}
还是在UserProfile模型中定义它:

class UserProfile extends Model {

    public function leaveRequests()
    {
        return $this->hasMany('App\LeaveRequest');

    }
}
我问这个问题是因为如果您查看leave_requests表上的外键关系,它是 与users表相关,因此我个人将在users模型上定义雄辩的关系。然而,并非所有用户都是如此 将提交请假申请,例如,如果您的网站管理员用户

那我换张桌子好吗 关系,从而使leave_requests表上的外键user_id与user_profiles表相关 并将雄辩的关系添加到UserProfile模型中

你们将如何实现这一点?当您被迫使用单个用户表来容纳时,这会变得非常混乱 身份验证,然后必须创建单独的1对1表来存储不同的用户类型属性。 外键关系变得稍微模糊。通常情况下,我会为每种类型的用户(即用户、管理员等)创建单独的表-不会有配置文件表。但是,身份验证的实现变得更加复杂


请分享您的想法以及如何实现上述功能。

即使用户管理员和普通用户不共享相同的配置文件属性,也最好不要将用户表分开。大多数情况下是1对1关系。我仍将在用户表中声明它,并将可为null的类型分配给field属性。对于departments表,您可以将user_id指定为外键,并将其设置为null。删除user_profiles表,这会让你头疼。因此,答案是,在user.php模型中定义请求之间的关系。您不需要UserProfile模型。您是否在项目中实现了ACL方法?我看到您有另一个外键manager\u id。这意味着您有managers表?请共享managers表。为什么必须将此表与用户分开?让我看看你们经理表的结构,我会回答你们所有的问题。