1

モデルにオプション型のクラスを取る update メソッドがあり、値を持つフィールドに応じて動的 SET を含む update ステートメントを作成したいと考えています。Phanton-dsl 1.5 を使用すると、次のようなことがありました。

import com.websudos.phantom.query.{ AssignmentsQuery => AQ }

override def updateModel(m: Upd)(implicit ec: EC): Future[Unit] = {
    if (m.isEmpty) return Future.successful(())
    val upd = update
    upd.where(_.user_id eqs m.user_id)
    val mod: AQ[CTable, Val] = new AQ(this, upd.qb.`with`())
    for (first_name <- m.first_name) mod.and(_.first_name setTo first_name)
    for (last_name <- m.last_name) mod.and(_.last_name setTo last_name)
    mod.future.map(_ => ())
}

現在、Phantom-dsl (1.27) の最新リリースに移行しようとしていますが、dsl だけを使用して同等のことを行うのに問題があります。どのフィールドも None になる可能性があるため、最初の modify() を作成してから任意の数の and() を使用して続行するのは困難です。

これに対処する方法についての提案は役に立ちます。

4

1 に答える 1

2

これは を使用setIfDefinedして可能であり、何もラップする必要はありません。

db.table.update.where(_.bla eqs bla)
  .modify(_.x setIfDefined None)
  .and(_.y setIfDefined Some("text")

これは基本的にすべてのものを無視Noneし、クエリに表示されないように強制します。

于 2016-09-15T20:26:54.023 に答える