2017-10-14 1 views
1

user_position이 고유 번호 인 위치라는 테이블이 있습니다. 새 user_position이 테이블에 없거나 현재 user_position과 동일한 경우에만 레코드를 업데이트하려고합니다. 그러한 규칙을 어떻게 표현합니까? 아래의 현재 규칙은 업데이트를 허용하지 않습니다.존재하는 경우 고유 한 열을 업데이트하는 Laravel 규칙

$rule=[  
    'user_position' => 'required|integer|unique:positions' 
] 

답변

0

사용 updateOrCreate() 방법 :

$positions = Position::updateOrCreate(
    ['user_position' => $userPosition], 
    ['name' => $newName, 'age' => $newAge] 
); 

또한 기존 모델을 업데이트하거나 존재하지 않는 경우는 새로운 모델을 만들 상황 건너 올 수 있습니다. Laravel은 이것을 한 단계에서 updateOrCreate하는 방법을 제공합니다.

https://laravel.com/docs/5.5/eloquent#other-creation-methods

0

에서 Docs

주어진 규칙을 무시하도록 고유 규칙을 강제 적용 :

경우에 따라 고유 확인 중에 주어진 ID를 무시할 수 있습니다. 예를 들어 사용자 이름, 전자 메일 주소 및 위치가 포함 된 "프로필 업데이트"화면을 고려해보십시오. 물론 으로 전자 메일 주소가 고유한지 확인해야합니다. 그러나 사용자가 만 전자 메일 필드가 아닌 이름 필드를 변경하는 경우 사용자가 이미 전자 메일 주소의 소유자이기 때문에 유효성 검사 오류가 발생하지 않게하려고합니다.

다음은 필수 무시를 사용하여이를 수행하는 방법입니다.

유효성 검사에 Form Requests을 사용하는 경우 이와 같은 작업을 수행 할 수 있습니다. URL을 가정하면 확인을 위해 요청 클래스를 사용하지 않는 경우

use Illuminate\Validation\Rule; 
.... 

public function rules() 
{ 
    //position id 
    $id = $this->route()->parameter('position')); 
    //or like this if id is in parameter as 2nd segment 
    //$id = $this->segment(2); 

    return [ 
     'user_position' => [ 
      'required', 
      Rule::unique('positions')->ignore($id) 
     ] 
    ]; 
} 

를 만들// 같은 것입니다 편집 및 위치에 대한/1/편집을 배치

//get id of parameter positions 
//using Illuminate\Http\Request $request; 
$id = $request->route()->parameter('position')); 
//or using helper 
// $id = request()->route()->parameter('position')); 

$rule=[ 
    'user_position' => [ 
      'required', 
      Rule::unique('positions')->ignore($id) 
     ] 
]; 
관련 문제