簡體   English   中英

如何在 Slick 中使用 LIKE 運算符?

[英]How to use LIKE operator in Slick?

我正在嘗試使用Slick框架與MySQL集成。 但是,每當我使用LIKE運算符時,它都會失敗並顯示錯誤,如下所示。

代碼

.filterIf(etilizeRequest.q.nonEmpty) {
    case ((((((prod, manRep), catRep), cnRep), pdRep), prodSkusRep), saRep) =>
        cnRep.map(_.name).like("%"+etilizeRequest.q.get+"%").get
}

錯誤

slick.SlickException:在計算 Rep[Option[_]].getOrElse 的默認值時捕獲異常——當 slick.compiler.HoistClientOps$$anonfun$rewriteDBSide$1.applyOrElse 的數據庫端需要該值時,這不能懶惰地完成(HoistClientOps.scala:159) 在 slick.compiler.HoistClientOps$$anonfun$rewriteDBSide$1.applyOrElse(HoistClientOps.scala:152) 在 slick.ast.NodeOps$.r$1(Util.scala:47) 在 slick.ast。 NodeOps$.$anonfun$replace$2(Util.scala:48) at slick.ast.BinaryNode.mapChildren(Node.scala:204) at slick.ast.BinaryNode.mapChildren$(Node.scala:200) at slick.ast .Filter.mapChildren(Node.scala:310) 在 slick.ast.NodeOps$.g$1(Util.scala:48) 在 slick.ast.NodeOps$.r$1(Util.scala:47) 在 slick.ast。 NodeOps$.$anonfun$replace$2(Util.scala:48) 導致:slick.SlickException:在 slick.lifted.OptionColumnExtensionMethods$.$anonfun$get$1(ExtensionMethods. scala:39) 在 slick.compiler.HoistClientOps$$anonfun$rewri teDBSide$1.applyOrElse(HoistClientOps.scala:156) at slick.compiler.HoistClientOps$$anonfun$rewriteDBSide$1.applyOrElse(HoistClientOps.scala:152) at slick.ast.NodeOps$.r$1:4Util.scala slick.ast.NodeOps$.$anonfun$replace$2(Util.scala:48) at slick.ast.BinaryNode.mapChildren(Node.scala:204) at slick.ast.BinaryNode.mapChildren$(Node.scala:200)在 slick.ast.Filter.mapChildren(Node.scala:310) 在 slick.ast.NodeOps$.g$1(Util.scala:48) 在 slick.ast.NodeOps$.r$1(Util.scala:47)

有人可以提出這個錯誤背后的原因,我該如何解決?

.get在 SQL 級別發生時,Slick 不能總是在Option上調用.get 我不清楚何時發生這種情況,但在您的示例中,我猜這將是最后的.get 我認為這是因為我們會要求在數據庫級別將可選的like表達式轉換為 SQL。 我不認為那是可能的。

在您的情況下,有一種解決方法可以將可選列轉換為字符串列:

cnRep.map(_.name).asColumnOf[String].like(...etc...)

...你可以省略最后的.get調用。 (我實際上認為在 Slick 3.3 中添加了對此的自動支持,但我想不是)。

您也可以使用filterOpt而不是filterIf 這將從您的LIKE表達式中再刪除一個get Essential Slick 的第 2.9 節給出了一些示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM