Scala Slick-使用多个表更新查询

Scala Slick-使用多个表更新查询,scala,playframework,slick,slick-3.0,Scala,Playframework,Slick,Slick 3.0,我目前在scala-slick3项目中面临更新查询问题。我有一个报告-类,它包含多个产品,每个产品包含多个部分。我想实现一个功能,将此报告中每个产品的每个部分标记为已评估 我想做这样的事情: def markProductPartsForReportAsAssessed(reportId: Int) = { val query = for { (products, parts) <- (report_product_query filter(_.reportI

我目前在scala-slick3项目中面临更新查询问题。我有一个
报告
-类,它包含多个
产品
,每个
产品
包含多个
部分
。我想实现一个功能,将此
报告中每个
产品的每个
部分
标记为
已评估

我想做这样的事情:

 def markProductPartsForReportAsAssessed(reportId: Int) = {
     val query = for {
         (products, parts) <- (report_product_query filter(_.reportId === reportId) 
                               join (part_query filter(_.isAssessed === false)) 
                               on (_.productId === _.productId))
      } yield parts.isAssessed

      db.run(query.update(true))
 }
def markproductpartsforreportassessed(reportId:Int)={
val query=for{

(产品、零件)我想这是因为更新查询只需要一个表

UPDATE parts a SET isAccessed = 'true' 
WHERE a.isAccessed = 'false' and 
exists(select 'x' from products b 
where a.productId = b.producId and b.reportId = reportId)
因此,您可以将与“产品”表相关的条件放入过滤器中,如下所示

val reportId = "123" // some variable
val subQuery = (reportId:Rep[String], productId:Rep[String]) =>
 report_product_query.filter(r => r.report_id === reportId && r.product_id === productId)
val query = part_query.filter(p => p.isAccesssed === false:Rep[Boolean] && 
subQuery(reportId, p.productId).exists).map(_.isAccessed)
db.run(query.update(true))

我猜这是因为更新查询只需要一个表

UPDATE parts a SET isAccessed = 'true' 
WHERE a.isAccessed = 'false' and 
exists(select 'x' from products b 
where a.productId = b.producId and b.reportId = reportId)
因此,您可以将与“产品”表相关的条件放入过滤器中,如下所示

val reportId = "123" // some variable
val subQuery = (reportId:Rep[String], productId:Rep[String]) =>
 report_product_query.filter(r => r.report_id === reportId && r.product_id === productId)
val query = part_query.filter(p => p.isAccesssed === false:Rep[Boolean] && 
subQuery(reportId, p.productId).exists).map(_.isAccessed)
db.run(query.update(true))