使用 laravel 验证检查名称在未删除项目中是否唯一

新手上路,请多包涵

我有一个简单的表单,它发布到一个控制器,该控制器检查一个项目的名称是否已经被用于特定项目。如果是,则返回错误。这是我为此使用的代码:

 'name'    => 'required|min:1|unique:versions,name,NULL,id,project_id,'.$project->id,

我遇到的问题是,我不是硬删除,而是使用软删除将它们从数据库中删除,这意味着,例如,’Test’ 只能用作名称一次,即使在它被删除之后被删除。

我怎样才能检查它在未软删除的项目中对于该项目是否是唯一的?

原文由 Samsquanch 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 280
2 个回答

你可以试试这个:

 'name' => 'required|min:1|unique:versions,name,NULL,id,deleted_at,NULL'

这将确保 nameversions 表将是唯一的,如果记录被软删除并且具有相同的名称 name 那么它不会被计算在内,意味着, name 将即使存在同名的软删除记录,也会被接受。

要在更新时忽略模型,您应该在 id name 第一个 NULL

更新: 你也可以使用这样的东西来添加你自己的自定义规则:

 // 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

原文由 The Alpha 发布,翻译遵循 CC BY-SA 3.0 许可协议

我知道这个问题很老,但是在寻找类似问题的解决方案时我偶然发现了这个问题。您不需要自定义验证码。

我有一个分类帐代码数据库,其中每个用户 (user_id) 的“名称”和“短名称”必须是唯一的。我启用了软删除,因此它们应该只在给定用户的未删除行中是唯一的。

这是我返回验证字符串的函数:

 protected function validation_data($user_id, $update_id = "NULL") {
        return [
        'name' => "required|max:255|unique:ledger_codes,name,$update_id,id,deleted_at,NULL,user_id,$user_id",
        'short_name' => "max:255|min:3|unique:ledger_codes,short_name,$update_id,id,deleted_at,NULL,user_id,$user_id",
        'description' => 'max:255',
        ];
    }

对于任何想知道唯一验证器的参数字符串语法的人,它如下所示:

  • arg 0: 数据库中的表名
  • arg 1:值唯一的字段名
  • arg 2:要忽略的单个 id(如果不使用它,则设置为大写 NULL。)
  • arg 3:单个 id 所在的字段。它默认为“id”,因此如果您不使用它,并且您有更多参数,请使用字符串“id”。
  • arg 4/5:where 子句的字段名称/值对(在我的示例中为 where('deleted_at',null) 。)
  • arg 6/7:另一个字段名称/值对(在我的示例中为 where('user_id', $user_id) )。
  • arg 89: 另一个字段名称值对
  • arg 10/11:另一个……

… 等等。

字段名称/值对中的值字段可以是要匹配的值、NULL 或 NOT_NULL。

原文由 mp035 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏