我正在编写一个Drupal模块,用于处理从CSV文件创建新节点。我一直在做的方式,用户提供节点类型,我的模块进入数据库以查找该节点的字段。
用户将节点字段与CSV字段匹配后,我想验证数据。这需要找出节点字段的类型。我不完全确定如何做到这一点。 (也许看看content_node_field
表?)
然后,我必须创建节点。目前,该模块创建一个新的StdClass
对象,用必要的数据填充它,并保存它。
但是,如果我可以完全从数据库中抽象出来并避免处理它呢?如果我向用户询问此类型的节点已存在,该怎么办?我可以node_load()
此节点,并使用它来确定节点字段。当需要保存节点时,我可以使用“种子”节点来确定新节点的结构需要什么。
一个缺点:这需要在模块运行之前至少存在一个这种类型的节点。
另外,这会比直接访问数据库慢吗?
我担心随着时间的推移,db名称可能会发生变化,并且可以跨多个表定义内容类型。通过仅从预先存在的节点工作,我可以解决许多这些问题。正确?
答案 0 :(得分:0)
当然,node_load会进入数据库吗?节点字段存储在数据库中,因此如果您需要获取它们,则必须在某个时刻与数据库进行通信。鉴于Drupal上的一些页面加载调用了数百(甚至数千!)数据库查询,我真的不会担心一两个!
表名不太可能改变,并且架构应至少在Drupal的点版本之间保持固定。如果可能的话,最好使用API来获取所需的数据,这样可以更好地防止变更。我不知道这是否可能。