【问题标题】:Laravel validation with enum column使用枚举列进行 Laravel 验证
【发布时间】:2017-09-05 04:20:18
【问题描述】:

我有这个字段:

id、标题、类型

类型是枚举 我想按类型列验证我的标题,例如:

id | title | type
1 | test | option1
2| test | option2

因此,当有人尝试插入具有此条件的行时,应针对该列的唯一性进行验证。

3 | test | option1 ==> should not be insert due unique validation rule.

我的验证规则是什么样的?

问候

// 编辑1: 规则外观是解决方案。

【问题讨论】:

    标签: laravel validation laravel-5


    【解决方案1】:

    in:option1,option2 验证中的字段必须包含在给定的值列表中。

    not_in:option1,option2 验证中的字段不得包含在给定的值列表中。

    您的验证应该如下所示,但它需要您在“in”参数或“内爆”数组中硬编码选项。

    $validator = Validator::make(Input::only(['title', 'type']), [
        'type' => 'in:option1,option2, // option1 or option2 values
        'title' => 'required|min:6|max:255', //whatever rules you want ..
    ]);
    

    您可以通过这种方式避免“内爆”:

    $validator = Validator::make(Input::only(['title', 'type']), [
            'type' => Rule::in(['option1', 'option2']), // option1 or option2 values
            'title' => 'required|min:6|max:255', //whatever rules you want ..
        ]);
    

    【讨论】:

      【解决方案2】:

      如果type 字段不是动态的,您可以使用Rule 类在您的验证规则中添加额外的查询。

      return [
          'title' => [
              Rule::unique('tablename', 'title')->where(function ($query) {
                  $query->where('type', 'option1');
              })
          ]
      ];
      

      否则,您可以自定义验证规则。

      【讨论】:

        【解决方案3】:

        对此没有自定义规则。

        您无法通过任何 laravel 原生验证规则验证两列的组合是否唯一。

        但是你有两个选择:

        1. 使用自定义验证器创建您自己的规则。 Reference
        2. 使用这个包:https://github.com/felixkiss/uniquewith-validator

        当然,titletype 的组合在您的迁移中也是独一无二的。

        【讨论】:

          猜你喜欢
          • 2019-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-20
          • 2017-05-26
          • 2022-01-01
          • 2019-04-30
          • 2010-09-06
          相关资源
          最近更新 更多