我正在研究 DBIx 类,但我有点困惑,因为到目前为止我与数据库的交互都是 PHP 代码中的普通 SQL 查询。
无论如何,据我了解,该类使用结果类中定义的模式进行操作,而不是直接与数据库交互。模式可以通过各种 .pm 类手动构建,也可以通过 Loader 类从数据库中提取。
我的问题是:对此的首选方法是什么?如果我手动构建我的结果类然后更改我的数据库怎么办?我想我必须同时编辑表和类,这不是有点不切实际吗?
谢谢
我正在研究 DBIx 类,但我有点困惑,因为到目前为止我与数据库的交互都是 PHP 代码中的普通 SQL 查询。
无论如何,据我了解,该类使用结果类中定义的模式进行操作,而不是直接与数据库交互。模式可以通过各种 .pm 类手动构建,也可以通过 Loader 类从数据库中提取。
我的问题是:对此的首选方法是什么?如果我手动构建我的结果类然后更改我的数据库怎么办?我想我必须同时编辑表和类,这不是有点不切实际吗?
谢谢
使用像 DBIx::Class 这样的对象关系映射系统的困难之一是您必须使表类与您的模式保持同步。通常,它就像在这里和那里添加一个字段一样简单,也许偶尔添加一个新的外键关系。如果您的代码在版本控制中,那么跟踪应该相对简单。
在两个地方维护相同的东西(数据库模式)的缺点被拥有一个 ORM 系统的优势所抵消(恕我直言)。一旦你习惯了使用 DBIx::Class 查询及其 ResultSets,事情就会比一直编写原始 DBI 调用快得多。
就我个人而言,我对 Loader 类的运气并不好,但我已经有一段时间没有尝试过它们了。如果它们对您有用,那么它可能比在代码中手动维护您的模式定义更容易。另一方面,我从来没有被这需要的微不足道的努力所困扰。一旦系统启动并运行,数据库模式往往不会经常更改。