我试图找出节点如何映射回它们包含的字段以用于学习目的。这是怎么做到的?
答案 0 :(得分:9)
在Drupal 7中你有实体和领域;字段附加到实体。节点是实体的实现(节点模块实现hook_entity_info()
和其他此类挂钩),因此它可以包含字段。
所有字段/实体关系数据都存储在表field_data_field_x
和field_revision_field_x
或类似的表中(如果启用了节点修订,后者可能存储字段数据的修订版。)
这些表中的entity_id
列是节点的ID,bundle
是节点的内容类型。 revision_id
是节点的修订版ID,只有在启用了节点修订版时才非常有用。
<强>更新强>
在Drupal术语中,内容类型是bundle
,bundle
附加到实体(在本例中为node
实体)。当您创建新的内容类型时,它将存储在node_type
表中,并且当清除缓存(在所有模块上调用hook_entity_info
)时,node_entity_info()
函数会构建一个包列表从内容类型(看看该函数中以foreach (node_type_get_names() as $type => $name) {
开头的位,node_type_get_names
获取所有内容类型的列表。)
如上所述,字段可以附加到实体,因此字段可以附加到具有bundle
的delta(如果您愿意)的节点。
答案 1 :(得分:0)
在D7中,对于我来说, field_config_instance 表为我提供了必需的信息。