2016-04-07 20 views
2
ben veritabanından (:) oldukça kolay) içinde (otomatik artışı) benzersiz bir kimliği vardır ki, çalışanlar var ama onların employee_number olacak diğer alanın benzersizliğini kontrol etmek istiyorum

..laravel doğrulayıcı - Bütünlük kısıtlama ihlali

$this->validate($request, [     
          'employee_number' => 'required|unique:employees' 
          ]); 

Ama nasıl mevcut çalışan düzenlerken bu işlemi yapabilirsiniz: yeni bir çalışan oluştururken sadece arayıp çünkü

, bu oldukça kolaydır? Ben "düzenlenmiş" employee_number DİĞER kullanıcıları için benzersiz olup olmadığını (kontrol etmek istiyorum ... ben bunu

yapmaya çalıştım

employee_number NOT IN (SELECT employee_number 
         FROM employees 
         WHERE id = *edited_user_id*) 

doğrulama formu laravel için bu sorguyu yeniden yazmak gerektiği anlamına gelmektedir i onun değiştirseniz bile ..> Tamam -

$this->validate($request, [     
          'employee_number' => 'required|unique:employees,id,'.$input['employee_id'] 
          ]); 

, bir tablodaki kayıtları "çalışanlar"

id | name | employee_number 
----------------------------- 
1 | Peter |  0001 
2 | Paul |  0002 
3 | Frank |  0003 

Frank'in verileri değiştirmek için denemek

vardır düşünün çalışan numarası, bazı benzersiz bir tane, o iyi çalışıyor ...

Ama bir Frank'in hesabı için mevcut olanı eklediğimde, yani 0001 bana çalışan numarasının zaten alınmış olduğu uygun bir hata mesajı vermez (doğrulayıcıdan). ancak bunun yerine, bu

Whoops, looks like something went wrong. 

QueryException in Connection.php line 669: 
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0001' for key 'employees_employee_number' (SQL: *here comes the wrong sql query*) 

benim haklı ben yeni çalışana eklemek ve mevcut id eklemek için denemek çalıştığınızda gibi formda yukarıdaki doğru hata çıtayı yükseltmek nasıl biliyor musunuz hata sayfasına beni yönlendirir?

cevap

3

'required|unique:employees,id,'.$input['employee_id']'da küçük bir hata yaptınız. Artık employee_number girişinizin employees tablosunda id alanında benzersiz olup olmadığını görüyorsunuz.

Bu satırı şu şekilde değiştirin: 'required|unique:employees,employee_number,'.$input['employee_id'] ve gitmeye hazırsınız!

Lavarel belgelerinden: unique:table,column,except,idColumn. Doğrulayıcı

$rules = ['employee_number' => 

    'required|unique:employees,employee_number,'.$input['employee_id']] 

    $validator = \Validator::make($data = \Input::all(), $rules); 

      if ($validator->fails()) { 
       return [ 
        return [ 
         "status" => "fail", 
         "errors" => $validator->getMessageBag()->toArray() 
     ]; 
       ]; 
      } 

gösterildiği gibi ben Artık istek gönderdi ve yanıt olarak size göre kullanabilir hata mesajlarının ilişkisel dizi alacak yerden tepki toplayacak hata mesajı toplanan başarısız olursa

+0

maaaaaaan, sen benim cankurtarancısın :) Sana bir bira borçluyum! +1 çok teşekkür ederim –

1

kullanımınıza.

İlgili konular