2014-10-14 11 views
12

मैं उत्सुक था कि अगर कोई तरीका है तो हम जांच सकते हैं कि डेटाबेस में रिकॉर्ड हटाते समय डालने या डालने पर बाधा उल्लंघन त्रुटि है या नहीं।लारवेल बाधा उल्लंघन के लिए जांच

अपवाद को फेंक दिया गया 'QueryException' कहा जाता है लेकिन यह त्रुटियों की एक विस्तृत श्रृंखला हो सकता है। अच्छा होगा अगर हम अपवाद में जांच सकते हैं कि विशिष्ट त्रुटि क्या है।

उत्तर

26

आप 23000 Error code (Integrity Constraint Violation) लिए देख रहे हैं क्रम में एप्लिकेशन में निम्न कोड जोड़ें// global.php फ़ाइल शुरू कर सकते हैं। यदि आप QueryException कक्षा पर एक नज़र डालें, तो यह PDOException से फैला है, ताकि आप $errorInfo चर तक पहुंच सकें।

इस त्रुटि को पकड़ने के लिए, आप कोशिश कर सकते हैं:

try { 
    // ... 

} catch (\Illuminate\Database\QueryException $e) { 
    var_dump($e->errorInfo); 
} 

// Example output from MySQL 
array (size=3) 
    0 => string '23000' (length=5) 
    1 => int 1452 
    2 => string 'Cannot add or update a child row: a foreign key constraint fails (...)' 

अधिक विशिष्ट होना करने के लिए (डुप्लिकेट प्रविष्टि, रिक्त नहीं, जोड़ें/अपडेट करने बच्चे पंक्ति, माता पिता पंक्ति को हटा ...), यह प्रत्येक डीबीएमएस पर निर्भर करता है :

  • PostgreSQL और SQL serverSQLSTATE कोड के लिए SQL मानक के परंपराओं का पालन करें, ताकि आप सरणी $e->errorInfo[0] से पहले मान या कह सकते हैं $e->getCode() सीधे
  • MySQL, MariaDB और SQLite सख्ती से नियमों का पालन नहीं करते हैं, तो आप सरणी $e->errorInfo[1]

laravel के लिए से दूसरे मान देने के लिए की जरूरत है, त्रुटियों से निपटने के लिए आसान है, बस में इस कोड को जोड़ने के अपने "एप्लिकेशन/शुरू/global.php "फ़ाइल (या बनाने के एक service provider):

App::error(function(\Illuminate\Database\QueryException $exception) 
{ 
    $error = $exception->errorInfo; 
    // add your business logic 
}); 
+0

इसका मेरे साथ काम नहीं कर रहा तरह कोशिश पकड़ का उपयोग करके त्रुटि संभाल: ( अभी भी साइट को तोड़ रहा है। – itsazzad

+0

कृपया त्रुटि के बारे में अधिक विशिष्ट हो, शायद आप लैरवेल 5 चुड़ैल हैंडल त्रुटियों का उपयोग कर रहे हैं [ अलग-अलग] (http://laravel.com/docs/5.0/errors#handling-errors) – Razor

+0

laravel4 का उपयोग कर रहा हूं और डेटाबेस प्रविष्टि में डुप्लिकेशंस होने पर काम नहीं कर पा रहा हूं। यह सिर्फ त्रुटि फेंक रहा है और मैं अभी तक नहीं जानता कि इसे किसी अन्य तरीके से कैसे पकड़ें। – itsazzad

0

आप दस्तावेज में अपवाद

App::error(function(QueryException $exception) 
{ 
    print_r($exception->getMessage()); 
}); 

जांच इस part मुद्रित करने के लिए

2

तुम भी

try { 
     ... 
    } catch (\Exception $e) { 
     var_dump($e->errorInfo); 
    } 

तो ई के लिए देखो की कोशिश कर सकते रैर कोड

यह QueryException

सहित सभी अपवाद पकड़ता
0

पहले डाल यह आपके नियंत्रक में

use Exception; 

दूसरा इस उदाहरण

try{ //here trying to update email and phone in db which are unique values 
     DB::table('users') 
      ->where('role_id',1) 
      ->update($edit); 
     return redirect("admin/update_profile") 
       ->with('update','update'); 
      }catch(Exception $e){ 
      //if email or phone exist before in db redirect with error messages 
       return redirect()->back()->with('phone_email','phone_email_exist before'); 
      } 
संबंधित मुद्दे