2015-01-10 25 views
6

Tôi đang cố gắng để xác định khi chèn một bản ghi bằng cách sử dụng hùng hồn trong Laravel khi nó ném một ngoại lệ vì một lỗi trường duy nhất.Laravel catch Eloquent "Unique" lỗi trường

Code tôi có cho đến nay là:

try { 

    $result = Emailreminder::create(array(
         'user_id' => Auth::user()->id, 
         'email' => $newEmail, 
         'token' => $token, 
      )); 

} catch (Illuminate\Database\QueryException $e) { 
    return $e; 
} 

Nó ném một ngoại lệ OK Tôi chỉ không biết phải làm gì để xác định nó như là một lỗi cột trùng lặp?

Xin cảm ơn,

Gavin.

+0

Lần thêm mã đầu tiên! Lấy làm tiếc! – Gavin

+1

Vì một trong những ưu điểm chính của Eloquent là mã không cụ thể cho bất kỳ cơ sở dữ liệu cụ thể nào, có thể bạn không muốn cho phép lỗi này được ném ngay từ đầu. Nó có khả năng đòi hỏi phải thực hiện khác nhau để bắt nó dựa trên cơ sở dữ liệu bạn đang sử dụng. Cách thích hợp để mã này sẽ là đầu tiên kiểm tra xem hồ sơ có trong cơ sở dữ liệu và xử lý nó ở đó không. – TonyArra

Trả lời

22

tôi giả sử bạn sử dụng MySQL, nó có thể khác nhau đối với các hệ thống khác

Okay đầu tiên, mã lỗi cho duplicate entry is 1062. Và đây là cách bạn truy xuất mã lỗi từ trường hợp ngoại lệ:

catch (Illuminate\Database\QueryException $e){ 
    $errorCode = $e->errorInfo[1]; 
    if($errorCode == 1062){ 
     // houston, we have a duplicate entry problem 
    } 
} 
+0

Excatly những gì tôi đã được sau khi cảm ơn. Mặc dù @TonyArra có một điểm về Eloquent là DB độc lập. Cách tôi làm tròn nó là sử dụng quy tắc xác nhận duy nhất của Laravels. Vấn đề ở chỗ nó là bảng trong câu hỏi là một bảng khác với thông tin ban đầu xuất phát từ đó, vì vậy tôi thấy mình viết nhiều bản xác nhận hợp lệ mà tôi thấy lộn xộn. Vì vậy, bây giờ tôi tự hỏi mình, tôi đi với độc lập DB của Laravel hoặc chấp nhận thực tế là các ứng dụng có lẽ sẽ không bao giờ sử dụng bất kỳ DB khác hơn MySQL và chỉ buộc nó vào đó !! Hmmmm ..... – Gavin

Các vấn đề liên quan