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表。为什么必须将此表与用户分开?让我看看你们经理表的结构,我会回答你们所有的问题。