1

Playframework2にこのScalaQueryモデルがあります

object User {
    implicit object UserFormat extends Format[User] {
    def reads(json: JsValue) : User = User(
        None,
        (json \ "firstName").as[String],
        (json \ "lastName").as[String],
        (json \ "email").as[String]
    )

    def writes(user: User) : JsValue = JsObject(Seq(
        "firstName" -> JsString(user.firstName),
        "lastName" -> JsString(user.lastName),
        "email" -> JsString(user.email))
    )
    }
}

object UsersTable extends Table[User]("users") {
    def id = column[Long]("USER_ID", O.PrimaryKey, O.AutoInc)
    def fName = column[String]("USER_FIRSTNAME", O.NotNull)
    def lName= column[String]("USER_LASTNAME", O.NotNull)
    def email = column[String]("USER_EMAIL", O.NotNull)

    def user_email_idx = index("user_email_idx", email, unique = true)

    def * =  id.? ~ fName ~ lName ~ email <> (User.apply _, User.unapply _)
    def forInsert = fName ~ lName ~ email <> ({ (f, l, e) => User(None, f, l, e) }, { u:User => Some((u.firstName, u.lastName, u.email)) })
}

Select *を実行して、のすべての行を返したいのですがUsersTable。UsersTableプロジェクションを使用してこれを行うことは可能ですか?私はこのように見えるいくつかの例を見てきました

        UsersTable.where(_.fName startsWith "H").list 

基準に一致する行を選択します。それを渡さずにこれを行うにはどうすればよいですか?

ありがとう!

4

3 に答える 3

4

あなたがする必要があるのはこれだけです:

val query = for(r <- MyTable) yield r
val results = query.list

最初の行は、のようなものを表す実際のクエリオブジェクトを作成しselect * from MyTable、2番目の行は実際にそれを呼び出して結果をメモリにロードします。

あなたが知りたいと思うかもしれない重要な暗示はtableToQuery、です。これにより、MyTable内包表記が可能になります。およびqueryToQueryInvoker、。のようなメソッドを持つようにクエリをポン引きしますlist

または、次のようなことができるはずです

val query: Query[User] = MyTable

tableToQuery型の要件を満たすために暗黙を使用する必要があります。

于 2012-05-29T16:21:03.233 に答える
0

これがあなたが探しているものだと思います:https ://github.com/szeiger/scalaquery-examples/blob/master/src/main/scala/org/scalaquery/examples/FirstExample.scala#L73

クラスのすべてのメソッドについては、http://scalaquery.org/doc/api/scalaquery-0.9.4/#org.scalaquery.ql.Queryも参照してください。Query

for-comprehensionsを使用してテーブルをクエリすることもできます。

for {
  record <- MyTable if record.column0 === "foo"
} yield record.column1 ~ record.column2
于 2012-05-29T13:12:54.960 に答える
0

私は今のところそれをでやったval userQuery = UsersTable.where(_.email =!= "")。しかし、これが最善の答えではないと確信しています。したがって、これを開いたままにします。

于 2012-05-29T16:08:57.253 に答える