node_load还是直接查询?

时间:2011-02-14 05:54:06

标签: drupal drupal-6

您决定使用node_load()或直接撰写直接db_query()时使用了哪些经验法则?

在我正在查看的情况下,我需要获取一些节点数据解析两个nodereference字段上的数据。所以这将是对node_load()的3次调用。在某些方面,使用Joins直接构造查询会更有效吗?

这是用于自包含的模块,不会在其他任何地方分发或使用,所以我不相信我需要担心颠覆节点修改挂钩(或者我?)。

修改
再考虑一下我的问题,node_load()只有在你有一个节点可以抓取时才会真正适用(然后可能会进一步深入到我的例子中的nodereferences)。但是,一旦您需要根据某些条件返回多个节点,您就会被迫使用db_query吗? Drupal是否有任何用于编写此类查询的抽象API?

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:2)

使用API​​方法对直接数据库调用进行数据库调用的原因是提供数据库抽象层,以便您的应用程序可以在受支持的数据库引擎之间移动等,同时它还可以使您的应用程序正常处理任何架构更改(但不太可能)核心/模块可能会对相关表格进行处理。 @Berdir对CCK字段和Node_Ref字段说,这也可能更容易,但这取决于你对Drupal API& PHP或MySQL ......以Drupal方式实现这一目标的回报是提高未来的生产力和对代码库的理解以及可行的方法:)

哦,我的经验法则是 - 尽可能以Drupal方式进行(根据应用时间/成本/性能/任何要求可能变化)