2017-02-08 4 views
7

का उपयोग करके लार्वा फॉर्म सत्यापन अद्वितीय अद्वितीय है 2 फ़ील्ड पर मेरे पास एक अद्वितीय सत्यापन नियम कैसे हो सकता है?2 फ़ील्ड

ए। आवेदन को दो लोगों को समान समान नाम और अंतिम नाम रखने की अनुमति नहीं देनी चाहिए।

यह अनुमति है कि उपयोगकर्ता केवल प्रथम नाम या केवल अंतिम नाम भरें। क्योंकि उपयोगकर्ता में उनमें से केवल एक हो सकता है।

बी। लेकिन यदि उपयोगकर्ता केवल पहला नाम (ग्लेन) में प्रवेश करता है, तो तालिका में कोई अन्य व्यक्ति समान नहीं होना चाहिए (पहला नाम = 'ग्लेन' और अंतिम नाम = शून्य)। एक और 'ग्लेन स्मिथ' ठीक है।

मैंने निम्नलिखित नियमों का प्रयास किया। यह बहुत अच्छा काम करता है जब दोनों फ़ील्ड्स (पहला और अंतिम नाम) शून्य नहीं होते हैं:

'firstName' => 'unique:people,firstName,NULL,id,lastName,' . $request->lastName 

यह नियम बी पर विफल रहता है। जब केवल एक फ़ील्ड मौजूद होता है।

कोई संकेत?

उत्तर

7

निर्मित unique सत्यापनकर्ता वास्तव में उस समर्थन का समर्थन नहीं करेगा जो आप करने की कोशिश कर रहे हैं। इसका उद्देश्य यह सुनिश्चित करना है कि दो मानों के समग्र के बजाय डेटाबेस में एक वैध अद्वितीय है। हालांकि, अगर आप बना सकते हैं एक custom validator:

Validator::extend('uniqueFirstAndLastName', function ($attribute, $value, $parameters, $validator) { 
    $count = DB::table('people')->where('firstName', $value) 
           ->where('lastName', $parameters[0]) 
           ->count(); 

    return $count === 0; 
}); 

तो आप के साथ इस नए नियम पहुंच सकता है:

'firstName' => "uniqueFirstAndLastName:{$request->lastName}" 

आप शायद आप अपने डेटाबेस क्वेरी एक छोटा सा बदलाव करने की आवश्यकता हो सकती मिल जाएगा के रूप में यह अपरीक्षित है ।

+1

बॉक्स से बाहर काम करता है :) बहुत बहुत धन्यवाद !! – Warrio

+1

एक अद्यतन फ़ॉर्म को सत्यापित करते समय, हमें अतिरिक्त रिकॉर्ड जोड़कर वर्तमान रिकॉर्ड को बाहर करने की आवश्यकता है जहां 0:-> जहां ('आईडी', '<>', $ पैरामीटर [1]) और इसे ' firstName '=> "अद्वितीय फर्स्ट एंडलास्टनाम: {$ अनुरोध-> lastName}, {$ request-> id}" – Warrio

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