如何通过忽略laravel中的软删除项目对给定输入的唯一验证?谁可以回答我?
您可以在规则中添加条件,基本上用deleted_at == NULL
过滤结果:
$request->validate([
'foo' => 'exists:table,column,deleted_at,NULL',
]);
泰勒本人就github问题回答了这个问题。
您还可以创建自定义验证规则:
<?php
namespace AppRules;
use IlluminateContractsValidationRule;
class UniqueWithoutSoftDelete implements Rule
{
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
// Your logic goes here
// Return true to pass the validation
// ie: return Model::where($attribute, $value)->exists();
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'The :attribute must be unique.';
}
}
在您的控制器中实现它:
use AppRulesUniqueWithoutSoftDelete;
和您的控制器方法:
$request->validate([
'foo' => ['required', new UniqueWithoutSoftDelete],
]);
希望这对您有帮助。
我以另一种方式解决了它...在请求类中,编写以下代码:public function rules()
{
switch ( $this->method() ){
case 'POST':
return [
'currency_id' => ['required', Rule::unique('company_currencies')->where(function ($query) {
$query->where('deleted_at', Null);
})
],
];
break;
}
且在类文件的顶部 use IlluminateValidationRule;