>

현재 Laravel의 검증, 특히 unique 의 검증에 어려움을 겪고 있습니다.  유효성 검사기.

일부 값을 보유한 테이블이 있는데 중요한 것은 templateUrl 입니다. . 내가하는 일은 templateUrl 를 포함하는 양식을 사용자에게 표시하는 것입니다.  그는 이전 (저장 후)과 다른 값을 입력 한 다음 변경하거나 그대로 둘 수 있습니다. 이 templateUrl  이 표에서 고유해야합니다. 따라서 사용자 가이 templateUrl 를 변경하면  양식에서 아직 사용하지 않은 경우 모든 것이 정상이지만 사용자가 templateUrl 를 변경하지 않고 저장하려고하면 그런 다음 유효성 검사에서 오류가 발생합니다 (동일한 행이라도 테이블에 이미 저장되어 있기 때문에 ...). 행과 열이 같더라도 값을 저장할 수없는 것 같습니다. 무슨 뜻인지 알고 싶습니다.

이것은 검증을위한 코드입니다 :

$this->validate($request,
            [
                'templateUrl' => 'required|unique:users'
            ],
            [
                'templateUrl.unique' => 'Diese URL ist leider schon vergeben. Bitte suchen Sie sich eine andere aus!'
            ]
        );

동일한 사용자 인 경우 해당 값을 "입력"하거나 그대로 두도록 값을 저장하려면 어떻게해야합니까? 물론, 다른 사용자는 같은 templateUrl 를 입력 할 수 없습니다 그렇기 때문에 그러한 유효성 검사가 필요하지만 사용자가 templateUrl 를 허용하면  변경하지 않고 양식의 다른 필드 만 변경하면됩니다.

아이디어, 트릭?


  • 답변 # 1

    주어진 행 (이 경우 현재 행)을 무시하기 위해 유효성 검사에 추가 매개 변수를 추가 할 수 있습니다. 이에 대한 자세한 내용은 설명서를 참조하십시오.

    예 :

    $this->validate($request,
        [
            'templateUrl' => 'required|unique:users,templateUrl,' . $user->id // Ignore rows with primary key $user->id
        ],
        [
            'templateUrl.unique' => 'Diese URL ist leider schon vergeben. Bitte suchen Sie sich eine andere aus!'
        ]
    );
    
    

  • 답변 # 2

    따라서 아래와 같이 만들 수 있습니다. 다른 사용자에게만 고유한지, 사용자가있는 경우에만 확인하십시오. 이렇게하면 업데이트 및 저장 방법에서이 방법을 사용할 수 있습니다. 어쨌든-이 코드를 양식 요청으로 옮기는 것이 좋습니다.

    $this->validate($request, [
            'templateUrl' => 'required|unique:users,templateUrl' . ($user === null ? '' : ',' . $user->id),
        ], [
            'templateUrl.unique' => 'Diese URL ist leider schon vergeben. Bitte suchen Sie sich eine andere aus!',
        ]
    );
    
    

  • 이전 indexing - Java에서 Solr 색인 파일의 내부 읽기
  • 다음 html - 자바 스크립트 키 누르기 감지