Drupal 节点\加载还是直接查询?

Drupal 节点\加载还是直接查询?,drupal,drupal-6,Drupal,Drupal 6,在决定使用node\u load()还是直接编写db\u查询()时,您使用什么样的经验法则 在我现在看到的情况下,我需要在两个节点引用字段上获取一些节点数据和解析数据。这将是对node\u load()的3次调用。在这里的某个时刻,直接用连接构造查询会更有效吗 这是在一个自包含模块中使用的,该模块不会在其他任何地方分发或使用,因此我不认为我需要担心破坏节点修改挂钩(或者我需要吗?) 编辑: 进一步考虑我的问题,node\u load()只有在您有一个节点要抓取时才真正适用(然后可能会深入到节点引

在决定使用
node\u load()
还是直接编写
db\u查询()
时,您使用什么样的经验法则

在我现在看到的情况下,我需要在两个节点引用字段上获取一些节点数据解析数据。这将是对
node\u load()
的3次调用。在这里的某个时刻,直接用连接构造查询会更有效吗

这是在一个自包含模块中使用的,该模块不会在其他任何地方分发或使用,因此我不认为我需要担心破坏节点修改挂钩(或者我需要吗?)

编辑:
进一步考虑我的问题,
node\u load()
只有在您有一个节点要抓取时才真正适用(然后可能会深入到节点引用,如我的示例中所示)。但是,只要您需要根据某些条件返回多个节点,您就必须使用
db\u query
对吗?Drupal有任何抽象API来编写这样的查询吗?

不是完整的答案(我自己也不确定),只是一些提示

  • node_load()使用的是静态缓存(在Drupal 7中,您甚至可以使用实体_缓存模块使其成为永久缓存)。如果正在加载的节点在同一页面上再次使用,则该调用将是免费的

  • 查询CCK表很棘手。模式结构可以根据配置完全更改,例如,当使用单个或多个值时


使用API方法进行DB调用而不是直接DB调用背后的原因是提供一个DB抽象层,以便您的应用程序可以在受支持的数据库引擎等之间移动,还使您的应用程序能够优雅地处理核心/模块可能对相关表进行的任何架构更改(尽管不太可能)。正如@Berdir所说,对于CCK字段和Node_Ref字段,这可能更容易实现,但这取决于您对Drupal API&PHP或MySQL的信心……以Drupal的方式实现这一点的回报是提高未来的生产率和对代码库的理解,以及可能的情况:)

哦,我的经验法则是——如果可能的话,用Drupal的方式做(可能会根据应用程序时间/成本/性能/任何要求而变化)