php - Laravel 数据库不同字段之间的唯一键

标签 php mysql laravel-5

我正在用 laravel 构建一个网站。 用户表有两个电子邮件字段,一个“电子邮件”字段和一个“新电子邮件”字段。当用户想要更改电子邮件时,它首先存储在“new_email”中,然后当用户确认时更新“电子邮件”字段。

很好,但我想限制“new_email”字段与“email”字段相比是唯一的。这样任何用户都不能将他的电子邮件更改为现有用户。我也会在 php 端进行检查,但我希望数据库对其进行限制。所以我尝试了以下操作:

    Schema::table('users', function ($table) {
        $table->string('new_email')->unique('email')->nullable();
    });

没有成功,我仍然可以将电子邮件添加到"new"字段,即使它已经在电子邮件中了..

那么,我该如何实现呢?

最佳答案

你可以在 Laravel 中使用 Request 轻松做到这一点,

/**
 * Class ChangeEmailRequest
 * @package App\Http\Requests
 */
class ChangeEmailRequest extends Request
{
     /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
     public function authorize()
     {
        return true;
     }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
    */
   public function rules()
   {
        // Here it will check for unique in users table fro email field    
        return [
            'new_email' => 'required | email |unique:users,email',
            // Considering you have user Id while updating    
            'user_id' =>'required | numeric'   
        ];
   }
}

//在 Controller 中你必须像下面这样使用这个请求:

<?php namespace App\Http\Controllers;
  use App\Http\Requests\ChangeEmailRequest;
/**
 * Class User
 * @package App\Http\Controllers
 */
 class User extends Controller
 {
     public function changeEmail(ChangeEmailRequest $request)
     {
        // Considering you have user Id with it for updating
        $userId = $request->input('user_id', null);
        $user = User::findOrFail($userId);
        $user->new_email = $request->input('new_email', null);
        $user->save();
        return response($user);
    }
}

引用文献:Laravel Request , Laravel Validation

关于php - Laravel 数据库不同字段之间的唯一键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32320788/

相关文章:

php - SET Password=$password 后出现语法错误

c# - 如何使用 Fluent-NHibernate 和 MySQL 指定自动递增 (int) 标识列

php - MySQL在一个查询中从表中获取相关和不相关的记录

php - Laravel Homestead 中 PHP 错误日志的位置

php - WHERE IN 子句与 PDO 的绑定(bind)参数

php - 在 jwt-auth laravel 中获取自定义声明

php - 学说中的实体多对多(symfony2)

Mysql连接查询;它是什么以及我如何实现它?

ssh - 第一次使用 `homestead ssh`连接vagrant有默认密码吗?

php artisan up 命令在 Laravel 中不起作用?