// You can declare it inside your controller method before you run validation
Validator::extend('unique_project', function($attribute, $value, $parameters)
{
// $attribute will contain field name, i.e. name
// $value will contain the value in the $attribute/name
// $parameters will be an array of arguments passed
// i.e. [0] => arg1, [1] => arg2, [2] => arg3 and so on
return true for valid and false for invalid
});
您可以这样使用它:
'name' => 'required|min:1|unique_project:arg1,arg2,arg3' // add more args if needed
use Illuminate\Validation\Rule;
class UpdateArticleRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$data = $this->request->all();
return [
'slug' => [
'required',
Rule::unique('articles')->ignore($data['id'])->whereNull('deleted_at')
]
];
}
}
public function store(Request $request)
{
$request->validate([
'name'=>'required|unique:form_types,name,NULL,id,deleted_at,NULL',
]);
// Write your code here
}
更新方法:
public function update(Request $request, $id)
{
$request->validate([
'name'=>'required|unique:form_types,name,'.$id.',id,deleted_at,NULL',
]);
// Write Code here
}
6条答案
按热度按时间qcuzuvrc1#
您可以尝试:
这将确保
versions
表中的name
将是唯一的,如果记录被软删除并且具有相同的名称name,则将不对其进行计数,这意味着,即使存在具有相同名称的软删除记录,name也将被接受。若要在更新时忽略模型,您应该在
name
之后传递id
,以取代第一个NULL
。**更新:**您也可以使用类似的内容来添加您自己的自定义规则:
您可以这样使用它:
jtjikinw2#
我知道这个问题很老了,但是我在寻找类似问题的解决方案时偶然发现了这个问题。
我有一个分类帐代码数据库,其中每个用户(user_id)的'name'和'short_name'必须是唯一的。我启用了软删除,因此它们应该只在给定用户的未删除行中是唯一的。
这是我的函数,它返回验证字符串:
对于任何想知道唯一验证器的参数字符串语法的人,如下所示:
where('deleted_at',null)
。)where('user_id', $user_id)
)。...等等。
字段名称/值对中的值字段可以是要匹配的值、NULL或NOT_NULL。
8iwquhpp3#
如果有人正在寻找使用
Rule
类的解决方案。基本上,我们只忽略那些
deleted_at
字段不是null
的行。以下是可以与
ignore
函数一起使用的方法:https://laravel.com/api/5.8/Illuminate/Validation/Rules/DatabaseRule.htmlpolhcujo4#
用于添加记录
用于编辑记录
a5g8bdjr5#
创建方法时:
更新方法:
uujelgoq6#