2017-04-10 71 views
0

我有这个字段:与ENUM列Laravel验证

ID,名称,类型

类型是枚举 而且我想通过类型列来验证我的标题,例如:

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

所以,当有人试图插入一个具有此条件的行时,应该为该列的唯一性处理验证。

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

我的验证规则将如何显示?

Regards

回答

0

对此没有自定义规则。

无法通过任何laravel本机验证规则验证两列的组合是唯一的。

但是你有提前两个选择:

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

中做出的titletype独特的组合在您迁移以及。

0

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

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

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

0

在:选项,选项2 下验证的字段必须包含在值定列表。

NOT_IN:选项,选项2 下验证的字段不得列入值定列表。

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

$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 .. 
    ]);