[英]variable columns amount Anorm result set parser
我正在嘗試使用scala,這是我的堆棧:
我想使用Anorm創建一個結果集解析器,該解析器將能夠解析從給定表中選擇的任意數量的列。 這是我的代碼:
case class Campaign(id: Int, campaign_mode_id: Int, name: String)
class Application @Inject()(db: Database) extends Controller {
val campaign = {
get[Int]("campaign.id") ~
get[Int]("campaign.campaign_mode_id") ~
get[String]("campaign.name") map {
case id ~ campaign_mode_id ~ name => Campaign(id, campaign_mode_id, name)
}
}
def index = Action {
val data : List[Campaign] = db.withConnection { implicit connection =>
SQL("SELECT id, campaign_mode_id, name FROM campaign").as(campaign.*)
}
Ok(views.html.index(data))
}
}
我希望能夠運行以下Sqls並仍使用相同case class Campaign
:
SELECT id, name FROM campaign
SELECT name FROM campaign
如何實現此功能?
更新:
我將某些字段的代碼更改類型更新為Option:
case class Campaign(id: Int, campaign_mode_id: Option[Int], name: Option[String])
class Application @Inject()(db: Database) extends Controller {
val campaign = {
get[Int]("campaign.id") ~
get[Option[Int]]("campaign.campaign_mode_id") ~
get[Option[String]]("campaign.name") map {
case id ~ campaign_mode_id ~ name => Campaign(id, campaign_mode_id, name)
}
}
def index = Action {
val data : List[Campaign] = db.withConnection { implicit connection =>
SQL("SELECT id, name FROM campaign").as(campaign.*)
}
Ok(views.html.index(data))
}
}
此代碼產生以下錯誤:
[RuntimeException: campaign.campaign_mode_id not found, available columns : campaign.id, id, campaign.name, name]
如果campaign_mode_id
列可為空,則解析為Option[Int]
並始終存在於結果集中,請使用:
get[Option[Int]]("campaign.campaign_mode_id")
如果列campaign_mode_id
不可為空,則可能不會出現在結果集中,並且解析為Option[Int]
,請使用:
get[Int]("campaign.campaign_mode_id").?
就您而言,您似乎想要:
val campaign = {
get[Int]("campaign.id") ~
get[Int]("campaign.campaign_mode_id").? ~
get[String]("campaign.name").? map {
case id ~ campaign_mode_id ~ name => Campaign(id, campaign_mode_id, name)
}
}
假定campaign.campaign_mode_id
和compaign.name
都是不可為空的,但在結果集中是可選的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.