2017-03-02 8 views
1

Laravelには、2つの列が一緒になってテーブル内で一意であるかどうかを確認する検証方法がありますか?2つの列を結合するためのLaravelの検証規則

たとえば、テーブルに[(A、B)]がある場合、入力(A、A)または(B、B)は検証に合格するはずですが、(A、B)はもう一度失敗する必要があります。このような例

DB::table('mytable') 
      ->where([ 
       ['col1', $item->col1], 
       ['col2', $item->col2] 
      ]) 
      ->exists(); 

しかし、私は検証の中でそれをやりたいので、これをまねた何か:

public function validate() { 
     return Validator::make($this->attributes, [ 
      'col1|col2' => 'unique:mytable', 
      //.... 
     ])->errors(); 
    } 

答えて

2

あなたが複合インデックス(複数の列)の一意性の検証を探している場合は、カスタム検証ルールを作成しない限り、これが不可能です。

あなたが、私はそれをテストしていないが、それはあなたを助ける必要がありますあなたはApp\Http\Providers\AppServiceProvider.php を使用することができ、サービスプロバイダのboot()メソッドのコード、https://laravel.com/docs/validation#custom-validation-rules

// Example: 
// 'col1' => 'unique_with:table,col2,col3,col4,etc' 
// 'col2' => doesn't need to check uniqueness again, because we did it for col1 

Validator::extend('unique_with', function ($attribute, $value, $parameters, $validator) { 
    $request = request()->all(); 

    // $table is always the first parameter 
    // You can extend it to use dots in order to specify: connection.database.table 
    $table = array_shift($parameters); 

    // Add current column to the $clauses array 
    $clauses = [ 
    $attribute => $value, 
    ]; 

    // Add the rest 
    foreach ($parameters as $column) { 
    if (isset($request[$column])) { 
     $clauses[$column] = $request[$column]; 
    } 
    } 

    // Query for existence. 
    return ! DB::table($table) 
      ->where($clauses) 
      ->exists(); 
}); 

場所を参照して、カスタム検証ルールを作成することができます必要な調整を行います。

0

私はあなたが探しているものだと思うが必要ですどちらかが存在する場合はそれらが存在しますが、両方が一意であることを確認してくださいこれはあなたのために働く必要があります。

'col1' => 'unique:mytable|required_with:col2', 
'col2' => 'unique:mytable|required_with:col1' 
+0

これは、OPが求めていることではありません。質問には明示的に「_そこには、2つの列が一緒になってテーブル内で一意であるかどうかをチェックするLaravelで検証を構築する方法がありますか?」と記載されています。彼は複合インデックスについて話しています。現時点では不可能なのはカスタム検証ルールだけです。 – Frondor

+1

@Frondor誰かが何を求めているのかを直接見分けるのは難しいこともあります。この特定の答えは、OPによって提供された例に最も適しているようです。これがOPが望んでいないものなら、彼らは私を忘却に落とすことが自由です。 – Ohgodwhy

関連する問題