php - 从“用户”模型中提取电子邮件字段并通过外键将其添加到单独的模型“电子邮件”中
问题描述
我对 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']),
]);
}
有没有办法以明智的方式实现这一目标?还有其他文件必须进行调整才能使其正常工作吗?
问候,框架
解决方案
由于您要检查数据库中是否不存在活动的电子邮件,因此需要使用unique
验证规则。
https://laravel.com/docs/7.x/validation#rule-unique
use Illuminate\Validation\Rule;
在您的规则中添加此规则。
'email' => ['required', 'string', 'email', 'max:255', Rule::unique('emails',
'email')->where(function($query) {
return $query->where('is_active', TRUE);
})
],
控制器
protected function create(array $data)
{
$email = Email::create([
'email' => $data['email']
]);
return User::create([
'email_id' => $email->id,
'password' => Hash::make($data['password']),
]);
}
推荐阅读
- html - 我正在尝试在与输入表单的部分视图页面相同的页面上显示部分视图,但我不确定我是否正确执行
- git - 我在哪里更新 Windows 上 git bash 的环境变量
- asp.net-core-webapi - 实体框架多连接错误
- java - 在 if 条件下使用异常
- java - 无法运行带有 javaFX 捆绑依赖项的 .jar 可执行文件
- notepad++ - Notepad++ 7.7.1 使用 NPPExport 突出显示颜色语法不起作用
- python - 对具有最常见键值对的字典进行分组
- angular - PlatformLocation 没有提供者
- php - Laravel 在 API 路由上应用多个中间件
- python-2.7 - 如何从json访问python中的值