在 Slick 中实现触发器

implement triggers in Slick

我有一个 table 和几个 table 的外键。每当我从那个 table 中删除一行时,我希望首先删除子 table 中的所有行,然后才应该删除父亲 table 中的行。

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

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

谢谢!

是的,您可以通过在 slick

中使用普通 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)