【问题标题】:Laravel: Handle unique on UpdateLaravel:更新时唯一的句柄
【发布时间】:2018-05-07 18:18:05
【问题描述】:

我在更新期间对员工记录进行验证。有些字段应该是唯一的。但是在更新员工记录期间,正在完成对唯一字段的验证。我也研究并尝试了解决方案。 但我收到了这个错误:

错误代码:904 错误消息:ORA-00904:“ID”:无效标识符 位置:71 语句:select count() as aggregate from "EMPLOYEES" 其中 "EMAIL" = :p0 和 "ID" :p1 绑定: [ad@sdfdsf.com,3336] (SQL: select count() as aggregate from “EMPLOYEES”,其中“EMAIL”= ad@sdfdsf.com 和“ID” 3336)

这是我对解决方案的尝试:

public function update(Request $request, int $employee_id) {

    $this->validate ( $request, [
            'first_name' => "required|max:220|regex:/[a-z]/",
            'middle_name' => "max:120",
            'last_name' => "required|max:220|regex:/[a-z]/",
            'email' => "required|unique:employees, email, $employee_id|regex:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}/",
            'home_phone' => "unique:employees,home_phone, $employee_id|numeric|regex:/^[09][0-9]{8,9}$/",
            'mobile' => "unique:employees,mobile, $employee_id|numeric|regex:/(9)[0-9]{9}/",
            'job_id' => 'required',
            'department_id' => 'required',
            'group_id' => 'required',
            'node' => 'required',
            'branch' => 'required',
            'username' => "required|unique:employees,username, $employee_id|regex:/[A-Za-z0-9][.][A-Za-z0-9]/",
            'exchange_username' => "required|unique:employees,exchange_username, $employee_id|regex:/[A-Za-z0-9][.][A-Za-z0-9]/",
            'extension' => "unique:employees,extension, $employee_id|numeric|regex:/[0-9]{4}/",
    ] );

    Employee::where ('employee_id', $employee_id )->update ( $request->only ( [ 
            'first_name',
            'middle_name',
            'last_name',
            'email',
            'address',
            'home_phone',
            'mobile',
            'job_id',
            'department_id',
            'group_id',
            'branch',
            'node', 
            'name',
            'username',
            'type',
            'exchange_username',
            'toggle_ivr_access',
            'extension',
            'attributed_team',
            'cable_team_id',
            'disable',

    ] ) );
    Session::flash ( 'message', 'The Employee is Successfully Updated.' );
    return redirect ()->route ( 'employees.index' );
}

【问题讨论】:

  • 检查您的列名。您必须输入有效的列名。当你没有出现这个错误时。
  • 我已经检查过了。列名正确。
  • 71 是哪一行?
  • 请在下面查看我更新的部分。我已经发布了导致错误发生的错误部分。

标签: php laravel


【解决方案1】:

Forcing A Unique Rule To Ignore A Given ID:

有时,您可能希望在唯一检查期间忽略给定的 ID。 例如,考虑一个“更新配置文件”屏幕,其中包括 用户名、电子邮件地址和位置。当然,你会想要 验证电子邮件地址是否唯一。但是,如果用户只 更改名称字段而不是电子邮件字段,您不想要 验证错误被抛出,因为用户已经是所有者 电子邮件地址。

为了指示验证器忽略用户 ID,我们将使用规则 流利地定义规则的类。在本例中,我们还将指定 验证规则作为一个数组,而不是使用 |字符到 划定规则:

use Illuminate\Validation\Rule;

Validator::make($data, [
    'email' => [
        'required',
        Rule::unique('users')->ignore($user->id),
    ],
]);

【讨论】:

  • 我没有使用 Laravel 的 Validator 类,所以这个过程对我不起作用。我已经浏览了 Laravel 文档并使用它们,但无法获得预期的解决方案。请查看我在上面发布的尝试。
  • @DixonChaudhary 在您的情况下Validator::make($data, 可以替换为$this->validate ( $request,,但您确实需要规则对象,并且验证规则也可以定义为array 而不是string 分隔|
【解决方案2】:

我找出了错误并成功找到了解决方案。如果有人遇到类似问题,这是可行的解决方案。我必须传递单个用户的employee_id,而我传递多个用户的employee_id。

public function update(Request $request, int $employee_id) {
        $this->validate ( $request, [
                'first_name' => "required|max:220|regex:/[a-z]/",
                'middle_name' => "max:120",
                'last_name' => "required|max:220|regex:/[a-z]/",
                'email' => "required|unique:employees,email,".$employee_id.',employee_id|regex:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}/',
                'home_phone' => "unique:employees,home_phone,$employee_id,employee_id|numeric",
                'mobile' => "required|unique:employees,mobile,$employee_id,employee_id|numeric",
                'job_id' => 'required',
                'department_id' => 'required',
                'group_id' => 'required',
                'node' => 'required',
                'branch' => 'required',
                'username' => "required|unique:employees,username,".$employee_id.',employee_id|regex:/[A-Za-z0-9][.][A-Za-z0-9]/',
                'exchange_username' => "required|unique:employees,exchange_username,".$employee_id.',employee_id|regex:/[A-Za-z0-9][.][A-Za-z0-9]/',
                'extension' => "required|unique:employees,mobile,$employee_id,employee_id|numeric|regex:/[0-9]{4}/",    
        ] );
        Employee::where ('employee_id', $employee_id )->update ( $request->only ( [ 
                'first_name',
                'middle_name',
                'last_name',
                'email',
                'address',
                'home_phone',
                'mobile',
                'job_id',
                'department_id',
                'group_id',
                'branch',
                'node', 
                'name',
                'username',
                'type',
                'exchange_username',
                'toggle_ivr_access',
                'extension',
                'attributed_team',
                'cable_team_id',
                'disable',
        ] ) );
        Session::flash ( 'message', 'The Employee is Successfully Updated.' );
        return redirect ()->route ( 'employees.index' );
    }

【讨论】:

    猜你喜欢
    • 2014-06-28
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 2018-07-17
    • 2018-08-09
    • 2019-02-26
    相关资源
    最近更新 更多