5

私はクラスを持っていますUser

case class User (id: Int, name: String)

そして、 AnormStreamAPIを使用してクエリから行をマッピングしたいと思います。私はこのコードで試しました:

val selectUsers = SQL("SELECT id, name FROM users")
val users = selectUsers().map(
    user => User(0, user.name)
).toList

しかし、エラーが発生します:

Error raised is : value name is not a member of play.db.anorm.SqlRow

の上

user => User(0, user.↓name)

SqlRowをクラスにマップするにはどうすればよいですか?


リカルドによって提案されたように、私は試しました:

object User extends Magic[User]

val users: List[User] = SQL("SELECT * FROM users").as(User*)

しかし、このコードで私は次のようになりますRuntimeException occured : ColumnNotFound(User.id)

val users: List[User] = SQL("SELECT * FROM users").as(User*)

助言がありますか?User直前の行にオブジェクトがあると思いますか?そして私はまだ私のを持っていcase class Userます。

4

4 に答える 4

4

私はこれで動作しました:

val selectUsers = SQL("SELECT id, name FROM users")
val users = selectUsers().map(
    user => new User(user[Int]("id"), user[String]("name"))
).toList

すべての行userは辞書です。Scalaの構文はよくわかりません。

于 2011-06-03T22:30:04.423 に答える
4

マジックヘルパーを使用して、マジックを拡張するオブジェクトを作成できます。

object User extends Magic[User]

それで :

val users:List[User] = SQL("select * from User").as(User*)

詳細については、ドキュメントを参照してください:マジックヘルパー

于 2011-06-03T17:00:51.923 に答える
2

それをもう少しスケーラブルにするために、これを行うことができます。

を作成しval、受信データをユーザーにマップします。

import {classname}

val parsedValueOfUser = {
 get[Int]("id") ~
 get[String]("name") map {
   case id ~ name => User(id, name)
 }
}

これで、データベースからユーザーを取得し、それをUserクラスにマップする場合、次のことができます。

val selectUsers = SQL("SELECT id, name FROM users").as(parsedValueOfUser *)
于 2013-10-24T15:54:00.670 に答える
0

私はこの正確な問題に遭遇し、何が悪かったのかを突き止めるのにしばらく時間がかかりました。モデルであることが判明し、データベース名は同じで、大文字と小文字が区別される必要があります。

したがって、この例では、データベーステーブルを「ユーザー」と呼ぶ必要があります。

データベーステーブル名は、次を使用して変更できます。 RENAME TABLE users TO User ;

お役に立てば幸いです。

于 2011-07-24T13:31:07.507 に答える