LuczekInfoという名前のテーブルに行を挿入する次のコードと、データベースからデータを取得する関数があります。私の質問は、get(id)関数によって返される行で、テーブルluczekInfoから列を更新する関数を作成する方法です。 Slickで列の値を更新する最良の方法は何ですか?
def create(profil: luczekInfo): Either[Failure, luczekInfo] = {
try {
val id = db.withSession {
LuczekInfo returning LuczekInfo.id insert profil
}
Right(profil.copy(id = Some(id)))
} catch {
case e: SQLException =>
Left(databaseError(e))
}
}
def get(id: Int): Either[Failure, luczekInfo] = {
try {
db.withSession {
LuczekInfo.findById(id).firstOption match {
case Some(profil: luczekInfo) =>
Right(profil)
case _ =>
Left(notFoundError(id))
}
}
} catch {
case e: SQLException =>
Left(databaseError(e))
}
}
回答ありがとうございます。
Slick 2.X
(私が知る限り)2つの方法で行を更新できます。最初の方法は、タイプluczekInfo#TableElementType
の行オブジェクトを作成し、それを使用して行全体を更新することです。
def updateById(id: Long, row: luczekInfo#TableElementType)(implicit s: Session): Boolean =
luczekInfo.filter(_.id === id).update(row)
または、次を使用して単一のフィールドを更新できます。
def updateNameById(mId: Long, mName: String)(implicit s: Session) = {
val q = for { l <- luczekInfo if l.id === mId } yield l.name
q.update(mName).run
}
あなたのテーブルにname
というファイルがあると思いました。
更新に関するセクションの Slickドキュメント にもあります。
Slick 3.1.X
insertOrUpdate
( psert )操作の追加サポートがあります:
luczekInfo.insertOrUpdate(row)