更新数据出错时忽略用户结果输入

Ignoring the user result input when updating data goes wrong

我正在研究: edit.blade.php

用户可以编辑数据的地方和控制器的更新方法在这里:

public function update(Request $request, $id)
    {
        $discountCode = DiscountCode::find($id);

        $request->validate([
            'code' => 'unique:discount_codes,code'.$discountCode->id,
            'started_at' => 'required_if:timespan,TRUE',
            'ended_at' => 'required_if:timespan,TRUE',
        ],
  
        ...
    }

所以你可以看到 codediscount_codes table 中必须是唯一的。

所以我尝试添加:

$discountCode->id

为了忽略当前数据的唯一验证规则但它不起作用并且returns这个错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'code15' in 

'where clause' (SQL: select count(*) as aggregate from 

`discount_codes` where `code15` = GIGvJjp4PM)

15是我的数据行id。

那么这里出了什么问题?我该如何解决这个问题?

使用Rule::class创建规则并忽略特定的id

use Illuminate\Validation\Rule;

//...

public function update(Request $request, $id)
{
    $discountCode = DiscountCode::findOrFail($id);

    $request->validate([
        'code' => [Rule::unique('discount_codes')->ignore($id)],
        'started_at' => 'required_if:timespan,TRUE',
        'ended_at' => 'required_if:timespan,TRUE',
    ],

    ...
}