2013-07-09 4 views
16

मैं स्कैला स्लिक 1.0.1 के साथ वैकल्पिक दिनांक कॉलम के विरुद्ध फ़िल्टर करने का प्रयास कर रहा हूं।विकल्प कॉलम द्वारा स्लिम और फ़िल्टरिंग

यह हो सकता है मैं सिर्फ यह नहीं दिख रहा है, लेकिन मैं एक मेज है कि कुछ इस तरह दिखता है:

case class UserRole(id:UUID, userID:UUID, role:String) 
object UserRole extends Table[UserRole]("User_Role") { 

    //(id: Long = 0l, name: String, active: Boolean) extends KeyedEntity[Long] { 
    def id = column[UUID]("ID", O.PrimaryKey) 
    def userID = column[UUID]("user_id") 
    def vendorID = column[UUID]("vendor_id") 
    def role = column[String]("role") 
    def user = foreignKey("user_FK", userID, User)(_.id) 

    def start = column[java.sql.Date]("startDate") 
    def endDate = column[Option[java.sql.Date]]("endDate") 

    def * = id ~ userID ~ role <> (UserRole.apply _, UserRole.unapply _) 
} 

आप देखेंगे कि ENDDATE वैकल्पिक है।

मैं एक क्वेरी कैसे बना सकता हूं जहां मैं इतना अंत फ़िल्टर करता हूंडेट वर्तमान/डीबी) तिथि से पूर्ण/कोई नहीं या अधिक हो सकता है? FYI करें, मैं आम तौर पर एम्बेड किए गए API

धन्यवाद

उत्तर

11

यह सुंदर (null.asInstanceOf के बारे में हिस्सा) नहीं है का उपयोग कर रहा है, लेकिन मुझे लगता है कि यह काम करेगा। मैं एक पुराने स्काला क्वेरी पद से कि विचार आया, तो मैं नहीं जानता कि यदि चालाक कभी कुछ है कि के लिए में बेहतर डाल दिया, लेकिन जब मैं जिसके परिणामस्वरूप selectStatement क्वेरी से देखा, यह सही देखा:

val now = new java.sql.Date(System.currentTimeMillis()) 
val query = for { 
    role <- UserRole 
    if (role.endDate === null.asInstanceOf[Option[java.sql.Date]] || role.endDate > now) 
} yield role 

संपादित

@MartinKolinek द्वारा टिप्पणी के लिए धन्यवाद, इस कोड को भी काम करते हैं और अधिक स्वच्छ और शायद बेहतर तरीका काम करने के लिए है जाएगा:

val now = new java.sql.Date(System.currentTimeMillis()) 
val query = for { 
    role <- UserRole 
    if (role.endDate.isNull || role.endDate > now) 
} yield role 
+5

role.isNull भी –

+3

काम करेगा मैं w लगता है ई को स्लीक एपीआई के लिए जोड़ना चाहिए ताकि हम स्कैला विकल्प एपीआई के अनुरूप हों। – cvogt

+1

@cvogt, सहमत हुए, मैं वास्तव में आश्चर्यचकित था जब वह वहां नहीं था ... – cmbaxter

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