-2

我想使用 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");
  }       
}
4

5 回答 5

2
  1. @eggyal 在关于动态模式不好的评论中所说的话。
  2. 在数据库上使用以下查询information_schema

    SELECT *
    FROM `COLUMNS`
    WHERE TABLE_SCHEMA = 'database_name'
      AND TABLE_NAME = 'table_name'
      AND COLUMN_NAME = 'field_name'
    
于 2013-07-02T15:26:32.080 回答
1

确实是这样的 XY 问题。

D7 函数 field_info_field() 具有有关存储数据的列的信息,因此我不必询问这些列是否存在。

但是谢谢你

于 2013-07-06T20:43:05.300 回答
1

使用DESCRIBE查询,其中列出了表中的列。这是一个描述:http ://dev.mysql.com/doc/refman/4.1/en/describe.html

于 2013-07-02T15:26:50.137 回答
0

也许这可以帮助

$fields = mysql_list_fields('database_name', 'table_name');
$columns = mysql_num_fields($fields);
for ($i = 0; $i < $columns; $i++) {$field_array[] = mysql_field_name($fields, $i);}
if (!in_array('price', $field_array)){
  $result = mysql_query('ALTER TABLE table_name ADD price VARCHAR(10)');
}
于 2013-07-02T15:28:02.267 回答
0

这种方式怎么样:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'database_name'
  AND TABLE_NAME = 'table_name'
  AND COLUMN_NAME = 'field_name'
与上面类似

于 2015-08-17T12:26:51.430 回答