【发布时间】:2013-07-02 15:18:09
【问题描述】:
我想使用 migrate-module 将 Drupal7 网站的内容迁移到另一个 Drupal7 系统。
我必须添加和映射字段。 drupal 中每种内容类型的字段都存储在一个名为field_revision_field_name 的表中。大多数字段的值在field_name_value 列中。但是有些字段有另一种结构,所以我想检查field_name_value列是否存在。
我正在循环连接表并在 mysql 查询中添加字段。问题是,并不是每个表"field_revision_".$typeFields[$i](别名是$typeFields[$i]."_table")都有一个列$typeFields[$i]."_value":
for ($i=0; $i < sizeof($typeFields); $i++) {
$query->join(
"field_revision_".$typeFields[$i],
$typeFields[$i]."_table",
"n.nid = ".$typeFields[$i]."_table.entity_id"
);
$query->addField($typeFields[$i]."_table", $typeFields[$i]."_value");
}
我想在进行查询之前检查一下,如下所示:
for ($i=0; $i < sizeof($typeFields); $i++) {
if($typeFields[$i]."_table" has Column $typeFields[$i]."_value"){
$query->join(
"field_revision_".$typeFields[$i],
$typeFields[$i]."_table",
"n.nid = ".$typeFields[$i]."_table.entity_id"
);
$query->addField($typeFields[$i]."_table", $typeFields[$i]."_value");
}
}
【问题讨论】:
-
一般来说,数据库模式以这种方式是动态的设计是不好的。您尝试解决的哪些业务问题导致您使用动态模式?我担心这个问题可能是XY Problem的事件。
-
动态模式意味着不断重建索引,不是吗?
-
我有很多 $typeFields[$i]."_table 我认为这种方式比编写“数千”行代码更容易。只有 $typeFields[ $i] 更改(它是 drupal 内容类型的字段的名称)
-
我想使用迁移模块将 Drupal7 网站的内容迁移到另一个 Drupal7 系统。我必须添加和映射字段。 drupal 中每种内容类型的字段都存储在一个名为“field_revision_field_name”的表中。大多数字段的值在“field_name_value”列中。但是有些字段有另一种结构,那是因为我想检查“field_name_value”列是否存在。
-
你试过migrate_d2d吗?
标签: php mysql drupal drupal-7 migration