月別アーカイブ: 2015年12月

Slick3.0 トランザクション内で、クエリした結果を使って更新処理を行う

クエリした結果(リスト)から別の更新処理を行う方法です。

トランザクション内で処理するために、DBActionにまとめないとダメなのですが、
このへん、ちょっとややこしいですよね。

以下はTableAから得た結果(リスト)からTableBの削除を行う例です

val action =
(for {
   // TableAをクエリ
   list <- TableA.filter(name === "tateo").result
   // その結果を使ってTableBを削除
   _ <- DBIO.seq( list.map(r => TableB.filter(id === r.id).delete  ) : _*  )
} yield () ).transactionally

db.run(action)