سؤال

لدي جدول 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top