0

我正在将数据从 OpenCart 迁移到 Drupal 7。我有专门为 Drupal 7 设置的主数据库。安装了 Drupal。我在同一台服务器上创建了一个辅助数据库,它是我将从中迁移的 OpenCart 数据库的副本。

我这样做是因为有很多重叠的表,老实说,我真的不想将这两个数据库合并在一起,因为我将在迁移产品和相关信息后立即转储 OpenCart 数据库。

无论如何,我发现即使 Drupal 7 很容易支持这一点,它似乎在您尝试在辅助数据库上执行任何查询的那一秒时就崩溃了。废话我的意思是“白屏死机”废话。如果我启用了开发模块的数据库查询日志记录,那么它会在 WSOD 上输出该信息的一些未格式化的行。

下面是我用来执行此操作的代码示例。如您所见,即使是一个简单的 select 语句也会完全炸毁。有谁知道为什么会发生这种情况?

我真的很想完成这项工作并使用 migrate 模块来完成。但是我即将举手,只是编写一个自定义脚本来连接到数据库并将所有数据输出为一个巨大的 XML 文件,然后希望 migrate 模块可以处理它(或将聚合数据导入临时在某些时候表)。

$query = Database::getConnection('opencart', 'opencart')->query("SELECT * FROM product");

if ($query != NULL) {
  $row = $query->execute()->fetchObject();
  echo "<pre>" . print_r($row, true) . "</pre>";
  echo "<pre>" . print_r($query, true) . "</pre>";
}
else {
  echo "Query is NULL.";
}
4

2 回答 2

1

我以前这样做的方式是:

1- 编辑您的活动 settings.php 文件以将辅助数据库包含在您的 $databases 数组中。所以你会有类似的东西

$databases = array(
  'default'=> array(...),
  'secondary' => array(...),
);

2-在您的代码中,使用db_set_active('secondary');You can then execute db_query()s 和可能的 sdb_select()等。

3- 确保尽快将活动数据库切换回默认值。在切换回默认数据库之前,请注意您进行的函数调用。许多调用,如 t(),需要默认数据库,并且会取消它不活动。

于 2012-05-09T06:00:59.873 回答
1

在同事的帮助下,我终于想通了。问题是几件事。首先,当我将 query() 函数链接到 Database::getConnection() 上时,我试图运行 execute() 函数。但是 query() 函数不支持这一点。相反,我只需要在 $query var 的末尾运行 fetchAssoc()。

当我尝试使用数据库提取层来执行这个复杂的查询时,由于某些函数返回的内容,我构建它是错误的。我一直尝试使用的 join 和 addExpression 函数只返回一个别名,即使它们修改了查询对象。我试图链接那些内联,但你不能。因此,通过在对象自己的非链接线上一次调用这些函数,我能够让它们工作。我仍然能够将我正在使用的字段和 groupby 链接在一起。

因此,为了让它与 migrate 模块一起工作,我刚刚切换回使用数据库抽象层并进行了我上面提到的更改。

感谢大家提出的所有有用的建议。

于 2012-05-09T19:43:40.753 回答