3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以在唯一檢查期間忽略某些 ID:
use Illuminate\Validation\Rule;
public function store()
{
Product::create($this->validateRequest(new Product()));
return redirect('/product');
}
public function update(Product $product)
{
$product->update($this->validateRequest($product));
return redirect('/product');
}
private function validateRequest(Product $product)
{
return request()->validate([
'sub_category_id' => ['required'],
'name' => ['required', 'min:4'],
'code' => ['required', 'alpha_dash', Rule::unique('products')->ignore($product)],
'description' => ['required', 'min:4'],
'color' => ['required', 'min:3'],
'price' => ['required', 'integer'],
]);
}
在這里,您要么在更新時(shí)傳遞現(xiàn)有模型,要么在存儲(chǔ)時(shí)傳遞新的模型實(shí)例,因此在存儲(chǔ)新產(chǎn)品時(shí)$product->id返回調(diào)用,這樣數(shù)據(jù)庫(kù)中的任何產(chǎn)品都不會(huì)被忽略,或者在更新時(shí)傳遞 id,然后僅忽略該產(chǎn)品。null
來(lái)自文檔:
強(qiáng)制唯一規(guī)則忽略給定 ID:
有時(shí),您可能希望在唯一檢查期間忽略給定的 ID。例如,考慮一個(gè)“更新個(gè)人資料”屏幕,其中包括用戶的姓名、電子郵件地址和位置。您可能需要驗(yàn)證電子郵件地址是否唯一。但是,如果用戶僅更改名稱(chēng)字段而不更改電子郵件字段,則您不希望引發(fā)驗(yàn)證錯(cuò)誤,因?yàn)樵撚脩粢呀?jīng)是電子郵件地址的所有者。
為了指示驗(yàn)證器忽略用戶的 ID,我們將使用該類(lèi)Rule 來(lái)流暢地定義規(guī)則。在此示例中,我們還將驗(yàn)證規(guī)則指定為數(shù)組,而不是使用 | 分隔規(guī)則的字符:
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
但請(qǐng)注意以下幾點(diǎn):
您永遠(yuǎn)不應(yīng)該將任何用戶控制的請(qǐng)求輸入傳遞到忽略方法中。相反,您應(yīng)該只傳遞系統(tǒng)生成的唯一 ID,例如來(lái)自 Eloquent 模型實(shí)例的自動(dòng)遞增 ID 或 UUID。否則,您的應(yīng)用程序?qū)⑷菀资艿?SQL 注入攻擊。

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
所以這里的問(wèn)題是您使用相同的規(guī)則來(lái)創(chuàng)建產(chǎn)品和更新產(chǎn)品。
如果您使用的是最新的 Laravel,您可能需要閱讀有關(guān)表單請(qǐng)求的文檔https://laravel.com/docs/7.x/validation#form-request-validation并創(chuàng)建不同的表單請(qǐng)求以進(jìn)行存儲(chǔ)和更新。
如果你還想用你的方式,你可以嘗試如下
private function validateRequest()
{
$rules = [
'sub_category_id' => ['required'],
'name' => ['required', 'min:4'],
'description' => ['required', 'min:4'],
'color' => ['required', 'min:3'],
'price' => ['required', 'integer'],
];
if (request()->isMethod('store')) {
$rules['code'] = ['required', 'alpha_dash'];
}
return request()->validate($rules);
}
請(qǐng)告訴我是否有效!

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
試試這個(gè),正確且干凈的代碼
產(chǎn)品控制器
use Illuminate\Validation\Rule; // add this
public function store()
{
? ? $product = Product::create($this->validateRequest());
? ? return redirect('/product'); //use route instead of URL
}
public function update(Product $product)
{
? ? $product->update($this->validateRequest($product->id));
? ? return redirect('/product'); //use route instead of URL
}
private function validateRequest($id = null)
{
? ? return request()->validate([
? ? ? ? 'sub_category_id' => 'required',
? ? ? ? 'name' => 'required|min:4',
? ? ? ? 'code' => 'required|alpha_dash|' . Rule::unique('products')->ignore($id),
? ? ? ? 'description' => 'required|min:4',
? ? ? ? 'color' => 'required|min:3',
? ? ? ? 'price' => 'required|integer',
? ? ]);
}
建議使用Form請(qǐng)求驗(yàn)證
- 3 回答
- 0 關(guān)注
- 145 瀏覽
添加回答
舉報(bào)