如何用laravel中的新表扩展User表以容纳更多列(而不是透视表)



因此,在laravel中,我有一个User表,其中包含id、home_address、email_address和phone_number等信息。用户可以参加晚宴(活动(。如果他们没有出现在晚宴上,管理员应该可以禁止用户参与,直到他们被手动取消邀请。

用户表是";足够大";将新列添加到用户表中是没有意义的,而是创建一个新表来保持信息的分离。

在我的用户迁移文件中,我有

Schema::create('dinner_ban', function (Blueprint $table) {
$table->unsignedBigInteger('id');
$table->foreign('id')->references('id')->on('users');
$table->dateTime('date_ban');
$table->dateTime('date_unban');
$table->string('reason')->nullable();
});

在我的用户模型文件中,我有

public function userBanned() {
return $this->belongsTo('AppModelsUser', 'dinner_ban');
}

注意:dinner_ban没有自己的模型类。

桌子是单向的。当用户被禁止时,他们会被添加到dinner_ban表中,其中包括今天的日期、他们将被取消禁令的预计未来日期(但当然可以在该日期之前或之后(将来会自动取消(以及禁令的原因(不需要添加/提供(。当它们被取消绑定时,它们将从表中删除。没有跟踪某人被禁止的时间或次数。这是一个简单的检查,看看用户是否被禁止。如果他们被禁止,那么他们就不能参加晚宴。

以上内容,这是添加dinner_ban的正确方式吗?

未来有三种使用方法。如果是管理员,我想返回整个数据库并在页面上显示结果。如果是个人用户,我想检查他们的id是否存在于禁令数据库中,并返回true(包括禁令何时开始、何时结束以及原因(或false。当然,管理员可以编辑被禁止的个人成员,并编辑原因/估计不受欢迎的名单。

创建一个像"dinner_ban"来存储这种信息。

最好创建(如果你还没有(一个";user_preferences"具有类似以下结构的表格:

Schema::create('user_preferences', function (Blueprint $table) {
$table->unsignedBigInteger('id');
$table->foreign('user_id')->references('id')->on('users');
$table->json('value')->nullable();
});

并在"Cast"中定义关系(和Cast(;用户";型号:

public function userPreferences() {
return $this->hasOne(UserPreferences::class);
}

注意:最好制作";user_id";在偏好表和偏好集合中唯一";值";作为json。

最新更新