Laravel段塞更新记录

8xiog9wr  于 2023-01-10  发布在  其他
关注(0)|答案(4)|浏览(140)

我想忽略鼻涕虫,如果值没有改变。我目前得到这个错误,每当我更新的形式。

这是我的确认请求。
命名空间应用\Http\请求\管理;
使用光照\基础\Http\表单请求;
class ProductInsertFormRequest extends FormRequest { /***判断用户是否被授权进行此请求 * * @return bool */公共函数authorize(){ return true;}

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    return [
        'title'=>'required',
        'regularPrice'=>'required',
        'slug'=>'required|alpha_dash|min:5|max:255|unique:products,slug',
    ];
}

}

jvlzgdj9

jvlzgdj91#

1.规则中的Ignore()函数仅适用于id。
1.所以我把代码改成了下面的代码:

public function rules()
{
$decrypted = Crypt::decrypt($this->id);
//$slug = Product::whereId($decrypted)->pluck('slug')->first();

//return dd($slug);
 return [
    'title'=>'required',
    'regularPrice'=>'required',
    'slug' => ['required', 'alpha_dash', 'min:5', 'max:255', Rule::unique('products', 'slug')->ignore($decrypted)]
];
 }
mfuanj7w

mfuanj7w2#

最好的方法是使用一个表单请求来创建和更新记录

$postSlug = $this->route()->parameter('slug');
if (in_array($this->method(), ['PUT', 'POST']) && $postSlug) {
    $post = $this->postService->getBySlug($postSlug);
    $rules['slug'] = [
        'required',
        Rule::unique('posts')->ignore($post->id),
    ];
}
pgpifvop

pgpifvop3#

要在检查唯一性时忽略数据库表中的特定行,需要使用unique()规则和ignore()函数

'slug' => [
    'required',
    'alpha_dash',
    'min:5',
    'max:255',
    Rule::unique('products', 'slug')->ignore($this->product->slug)
]

这将检查“products”表的“slug”列中的唯一性,但包含“this slug”的特定行除外

isr3a4wc

isr3a4wc4#

使用此代码时,请注意“产品”表名

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    return [
        'title'=>'required',
        'regularPrice'=>'required',
        'slug' => [
                'required',
                'alpha_dash',
                'min:5',
                'max:255',
                Rule::unique('products', 'slug')->ignore($this->product),
            ],
    ];
}

相关问题