在Slick

时间:2015-11-05 10:20:56

标签: database scala slick

我有一个表,其中包含多个表的外键。每当我从该表中删除一行时,我希望首先删除子表中的所有行,然后才应删除父表中的行。

我的第一个想法是使用触发器,但我似乎无法在Slick中找到这种能力,这是我正在使用的数据库。

有没有办法在Slick中实现触发功能?

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,您可以通过使用普通的SQL查询来使用数据库触发器和函数

 def checkCleared: DBIO[Int] = {

  sqlu"""  DROP FUNCTION IF EXISTS funk() CASCADE;

          CREATE FUNCTION funk() RETURNS trigger
                LANGUAGE plpgsql
                AS '
              BEGIN
                IF OLD.cleared_can_load = FALSE AND NEW.cleared_can_load = TRUE
                THEN
                NEW.cleared_at = NOW() ;
                END IF;
                RETURN NEW;
              END;
            ';
              CREATE TRIGGER cleared
                            BEFORE UPDATE ON platform.product_settings
                            FOR EACH ROW EXECUTE PROCEDURE funk();
            """

}

Slick Plain SQL Queries docs

然后您可以通过以下方式执行普通的SQL查询

   db.run(checkCleared)