2016-02-26 24 views
2

我在laravel控制器中使用下面的代碼。並獲取username重複的錯誤,但我需要通過嘗試抓住它。此代碼不起作用。嘗試捕獲laravel不工作重複條目

<?php 
namespace App\Http\Controllers; 
use Illuminate\Http\Request; 
use App\Http\Requests; 
use App\Http\Controllers\Controller; 
use Response; 
use DB; 

class StaffController extends Controller 
{ 
    public function saveMember(Request $request){ 
     $errormsg = ""; 
     $result = false; 
     try{ 
      $result = DB::table('members')->insert(
        [ 
         'username' => $request->username, 
         'phone' => $request->phone, 
         'status' => 1 
        ] 
       ); 
     }catch(Exception $exception) 
     { 
      $errormsg = 'Database error! ' . $exception->getCode(); 
     } 
     return Response::json(['success'=>$result,'errormsg'=>$errormsg]); 
    } 
} 

我得到這個錯誤,我需要通過嘗試來處理,趕上

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'test1' for key 'username' 

感謝您的幫助。

+0

您是否收到錯誤信息或什麼? –

+0

添加在我的問題,我得到的錯誤 – Jija

回答

11

您需要使用作出例外全球,

  1. 無論是。

    use Exception; 
    

,然後使用

catch(Exception $exception) 
  • 或通過使用

    ​​
  • 代替此

    catch(Exception $exception) 
    
    +0

    謝謝,它爲我工作:) – Jija

    +0

    這是爲什麼這樣工作?即爲什麼catch(Exception $ exception)無法捕獲異常? –

    +0

    @JohnLittle:你是否能夠在不使用'使用異常'的情況下捕獲'catch(Exception $ exception)'的錯誤?或者你指向其他任何東西? – C2486

    4

    你可以很容易地避免這種嘗試& catch塊通過首先驗證你的數據庫表中所需列的用戶名的唯一性。你可以通過你的$ request對象來做到這一點,或者(通過設置一個自定義的Request類來完成這個驗證,然後再執行控制器方法)。 https://laravel.com/docs/5.1/validation#rule-unique

    +0

    是的,我會在稍後應用你的建議,但我的問題是爲什麼try-catch無法正常工作,儘管它解決了,謝謝你的回答。 – Jija