2015-01-10 8 views
6

मैं एक अद्वितीय फ़ील्ड त्रुटि के कारण अपवाद फेंकने पर लार्वेल में बोलने के दौरान रिकॉर्ड डालने पर पहचानने की कोशिश कर रहा हूं।लैरवेल पकड़ो "अनोखा" फ़ील्ड त्रुटि

कोड मैं अब तक है:

try { 

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

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

यह एक अपवाद ठीक मैं सिर्फ क्या एक स्तंभ डुप्लिकेट त्रुटि के रूप में पहचान करने के लिए क्या करने के लिए पता नहीं है फेंकता है?

धन्यवाद,

गेविन।

+0

पहली बार कोड जोड़ना! माफ़ कीजिये! – Gavin

+1

के बाद से सुवक्ता का प्रमुख लाभ में से एक कोड है कि किसी विशेष डेटाबेस के लिए विशिष्ट नहीं है, तो आप शायद नहीं इस त्रुटि पहली जगह में फेंक दिया करने के लिए अनुमति देना चाहते हैं। आप जिस डेटाबेस का उपयोग कर रहे हैं उसके आधार पर इसे पकड़ने के लिए इसे एक अलग कार्यान्वयन की आवश्यकता है। कोड को सही करने का सही तरीका यह जांचना होगा कि रिकॉर्ड डेटाबेस में है या नहीं और इसे वहां संभाल लें। – TonyArra

उत्तर

22

मैं तुम्हें MySQL का उपयोग कर रहा हूँ यह सोचते हैं, यह शायद अन्य प्रणालियों

ठीक पहले, duplicate entry is 1062 के लिए त्रुटि कोड के लिए अलग है। और यहां बताया गया है कि आप अपवाद से त्रुटि कोड कैसे प्राप्त करते हैं:

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

उत्साह से मैं धन्यवाद के बाद क्या था। यद्यपि @ टोनीअरा के पास एलोक्वेंट डीबी स्वतंत्र होने के बारे में एक बिंदु है। जिस तरह से मैं इसे मिला था वह लैरावेल के अद्वितीय 'सत्यापन नियम का उपयोग करना था। समस्या यह है कि तालिका में मूलभूत जानकारी तालिका से अलग थी, इसलिए मैंने खुद को कई सत्यापन नियमों को लिखा जो मुझे गन्दा मिला। तो अब मैं खुद से पूछता हूं, क्या मैं लैरवेल की डीबी आजादी के साथ जाता हूं या इस तथ्य को स्वीकार करता हूं कि ऐप शायद कभी भी किसी अन्य डीबी का उपयोग MySQL से नहीं करेगा और बस इसे टाई !! Hmmmm ..... – Gavin

संबंधित मुद्दे