【发布时间】:2020-11-17 22:22:10
【问题描述】:
我是 Laravel 的新手,并被指示将字段“电子邮件”与“用户”模型分开,而是使用与新创建的模型“电子邮件”相对应的 foreign_id。
用户:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->integer('email_id');
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
电子邮件:
public function up()
{
Schema::create('emails', function (Blueprint $table) {
$table->id();
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->boolean('is_active')->default(True);
$table->timestamps();
});
}
当然我已经在这些模型中设置了关系。
现在,当新用户通过表单注册时,我想检查输入的邮件地址是否已存在于“电子邮件”表中,以及可能已找到的邮件地址是否将属性“is_active”设置为 true。
目前,RegisterController 中的“验证器”和“创建”功能非常基本:
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
有没有办法以合理的方式实现这一目标?还有其他文件需要修改才能正常工作吗?
您好, 框架
【问题讨论】:
-
我很好奇 - 将电子邮件放在单独的表格中的目的是什么?
-
如果您只需要检查电子邮件是否已经存在,您可以使用exists validation rule。对于第二部分,你必须写一个custom validation rule
-
我的主管想让我把它放到一个单独的表中,因为有几种类型的用户在不同的模型和迁移中处理。但邮件地址仍然应该是唯一的
标签: php laravel user-registration