在 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();
"""
}
然后你可以通过
执行普通的sql查询
db.run(checkCleared)
我有一个 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();
"""
}
然后你可以通过
执行普通的sql查询 db.run(checkCleared)