كيفية الحصول على قيم "Char" من Postgres باستخدام Anorm
-
21-12-2019 - |
سؤال
لدي جدول Postgres -
CREATE TABLE "Contest"
(
id serial NOT NULL,
name varchar(100) NOT NULL,
type char(1) NOT NULL,
status char(1) NOT NULL,
...
)
أحاول الحصول على قيم الحقول type
و status
العودة إلى تطبيق Play 2.x (Anorm):
val parseContest = {
get[Pk[Int]]("id") ~
get[String]("name") ~
get[Char]("type") ~
get[Char]("status") map {
case id~name~c_type~status =>
Contest(id, name, c_type, status)
}
}
والحصول على الخطأ:
could not find implicit value for parameter extractor: anorm.Column[Char]
يبدو أن "Char" غير مدعوم بواسطة anorm.ما الذي يجب أن أغيره في الكود الخاص بي؟هل هي ممارسة جيدة للاستخدام get[String]("status")
وثم status.head
كحل بديل؟
المحلول
أعتقد أنه يمكنك كتابة محول ضمني لملفك char
أعمدة.سيبدو ذلك كالتالي:
implicit def columnToChar: Column[Char] = {
Column[Char](transformer = {
(value, meta) =>
val MetaDataItem(qualified, nullable, clazz) = meta
value match {
case ch: String => Right(ch.head)
case _ => Left(TypeDoesNotMatch("Cannot convert " + value + " to Char for column " + qualified))
}
})
}
ثم تأكد من أن هذا المحول في النطاق.
لست متأكدًا من أن القيمة ستكون سلسلة ولكن يمكنك التحقق منها وإجراء التصحيحات المقابلة.
نصائح أخرى
تم دمج العلاقات العامة مؤخرًا على Anorm حول هذا الموضوع: https://github.com/playframework/playframework/pull/2189
لا تنتمي إلى StackOverflow