9
एक उपयोगकर्ता मिलान उपयोगकर्ता नाम खोजने का सही तरीका क्या है?स्लिक में केस-असंवेदनशील स्ट्रिंग तुलना?
साथ उपयोगकर्ता परिभाषित प्रकार उपयोगकर्ता:
case class User (userId: String, username: String)
object User extends Table[User]("user") {
def userId = column[String]("userId", O.PrimaryKey)
def username = column[String]("username")
def * = userId ~ authId ~ username <>(User.apply _, User.unapply _)
Database.forDataSource(DB.getDataSource()) withSession {
implicit session: Session =>
val q = for { u <- User if u.username.equalsIgnoreCase(someUsername) }
yield u
q.headOption
user.username प्रकार स्तंभ [स्ट्रिंग] जो स्ट्रिंग के लिए कोई रूपांतरण है की है।
वांछित क्या है डेटाबेस को स्ट्रिंग-असंवेदनशील तुलना क्वेरी के हिस्से के रूप में करना है।
दिलचस्प बात यह है कि मैं स्लिम के तहत '.capitalize' विधि का उपयोग करके कुछ समान और बराबर तार करने की कोशिश कर रहा था, हालांकि यह काम नहीं करता क्योंकि यह केवल 'p.loginName'' नहीं, बल्कि मेरी 'पार्टी नाम' स्ट्रिंग को कैपिटल करता है। हालांकि .toLowerCase' हालांकि चाल चल रहा है! – dbau
आपको ध्यान रखना चाहिए कि बड़ी टेबल के लिए यह बहुत अक्षम हो जाता है और कुछ मामलों में यह इंडेक्स के उचित उपयोग को रोक सकता है। मुझे एक विशेष मामला याद है जहां यह सबसे लगातार चलने वाली क्वेरी थी, पूरी बात पूरी प्रणाली पर नाटकीय प्रभाव डाल रही थी। कुछ डीबी सिस्टम फ़ंक्शन अनुप्रयोगों पर इंडेक्स के निर्माण की अनुमति दे सकते हैं (उदाहरण: लोअरकेस ('loginName')) लेकिन इस विशेष मामले में मुझे डीबी' loginName_lowercase' में एक माध्यमिक कॉलम बनाना था, जिसमें 'loginName' की लोअरकेस प्रति थी और जो क्वेरी में इस्तेमाल किया गया था। इसका प्रदर्शन पर बहुत सकारात्मक प्रभाव पड़ा। –