我目前正在对DBIx :: Class进行一些研究,以便从Class :: DBI迁移我当前的应用程序。老实说,在配置结果类时,我对DBIx :: Class有点失望,使用Class :: DBI我可以通过在没有代码生成器的情况下调用on函数来设置模型上的元数据等我的问题是。 ..我可以用DBIX :: Class做同样的事情似乎DBIx :: Class中不支持客户端触发器,或者我没有查看错误的文档?
答案 0 :(得分:5)
触发器可以通过在Result类中重新定义适当的方法(new / create / update / delete等),并在代码之前或之后调用其中的父(通过$self->next::method()
)来实现。不可否认,与Class :: DBI中的before / after触发器相比,它有点笨拙。
至于元数据 - 您是在谈论对象上的临时列吗?即不会存储在数据库行中的数据。这些可以使用CPAN上的Class :: Accessor :: *模块之一轻松添加
从CDBI切换到DBIC时最难做的变化之一是根据ResultSet进行思考 - 通常通过CDBI中的Class方法实现的内容将成为ResultSet上的方法 - 并且代码可能需要重构很明显,它并不总是从一个到另一个的直接转换。