2017-03-02 11 views
1

두 개의 열이 함께 테이블에서 고유한지 확인하는 유효성 검사를 빌드하는 방법이 있습니까?두 개의 열을 결합하는 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

당신이 복합 인덱스 (여러 열)의 고유성의 검증을 찾고 있다면, 이것은 불가능하다.

당신은 사용자 지정 유효성 검사 규칙을 만들 서비스 제공자의 boot() 방법 코드, 당신은 App\Http\Providers\AppServiceProvider.php 내가 그것을 테스트하지 않은 사용할 수 있습니다 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가 요구하는 것이 아닙니다. 질문에 명시 적으로 "_ 두 ​​개의 열이 함께 테이블에 고유한지 확인하는 Laravel에서 유효성 검사를 작성하는 방법이 있습니까?" 그는 복합 지수에 대해 이야기하고 있습니다. 현재 사용자 지정 유효성 검사 규칙으로 만 가능하지는 않습니다. – Frondor

+1

@Frondor 때로는 누군가가 묻는 것을 직접 구별하기가 어렵습니다. 이 특별한 대답은 OP가 제공 한 예제에 가장 잘 맞는 것으로 보입니다. 이것이 OP가 원하는 것이 아니라면, 그들은 자유롭게 나를 망각으로 몰아 넣을 수 있습니다. – Ohgodwhy