そのため、誤って Magento ストアからすべてのレビューを削除してしまいました。興味深いのは、PhpMyAdmin にログインしたときに、すべてのレビューがある review_detail テーブルがまだ表示されていることです。これはデータベースから削除されていないのでしょうか?
問題は、データベースからこれらのレビューを取得してサイトに表示するにはどうすればよいかということです。review_detail データベースを消去して、再度インポートする必要がありますか?
ありがとう!
そのため、誤って Magento ストアからすべてのレビューを削除してしまいました。興味深いのは、PhpMyAdmin にログインしたときに、すべてのレビューがある review_detail テーブルがまだ表示されていることです。これはデータベースから削除されていないのでしょうか?
問題は、データベースからこれらのレビューを取得してサイトに表示するにはどうすればよいかということです。review_detail データベースを消去して、再度インポートする必要がありますか?
ありがとう!
Magentoのレビューは、3つの異なるデータベーステーブルにまたがるストアです。
このreview
テーブルは、各レビューオブジェクトを追跡し、それをオブジェクト(つまり製品)のレビューにリンクするメインテーブルです。そこにエントリがない場合、レビューはありません。
review_detail
テーブルは、実際にレビュー情報が含まれているテーブルです。
最後に、このreview_store
テーブルは、各Magentoストアインスタンスに属するレビューを追跡します。(同じシステムにMagentoがオブジェクトを「保存」することを意味するストア)
私の推測では、あなたの削除操作はreview
テーブルを通過しましたが、他の操作は通過しませんでした。この場合、データ(バックアップなし)は失われます。そこにまだデータがある場合は、別のより微妙な問題が発生しています。ある種のデータ復元が、専門家ではない人に説明できるようなものであるかどうかはわかりません。
Alan と Giri06 の回答に基づいた小さなスクリプトで、消えたレビューを復元します。
<?php
$xml = simplexml_load_file('./app/etc/local.xml', NULL, LIBXML_NOCDATA);
$db['host'] = $xml->global->resources->default_setup->connection->host;
$db['name'] = $xml->global->resources->default_setup->connection->dbname;
$db['user'] = $xml->global->resources->default_setup->connection->username;
$db['pass'] = $xml->global->resources->default_setup->connection->password;
$pref = $xml->global->resources->db->table_prefix;
mysql_connect($db['host'], $db['user'], $db['pass']) or die(mysql_error());
mysql_select_db($db['name']) or die(mysql_error());
$result = mysql_query("select `entity_pk_value`,`review_id` from `{$pref}rating_option_vote`") or die(mysql_error());
for ($i=0;$i<mysql_num_rows($result);$i++) {
$row = mysql_fetch_array($result);
$exists = mysql_query("select `entity_pk_value`,`review_id` from `{$pref}review` where `review_id`=".$row['review_id']) or die(mysql_error());
if (!mysql_num_rows($exists)) {
$query = "insert into `{$pref}review`(`entity_pk_value`,`review_id`,`entity_id`,`status_id`,`created_at`) values({$row['entity_pk_value']},{$row['review_id']},1,1,from_unixtime(unix_timestamp('2013-01-01 01:00:00')+floor(rand()*31536000)))";
echo "Inserting {$row['review_id']}<br>";
mysql_query($query) or die(mysql_error());
}
}
日付またはレビューは、2013 年のどこかでランダムに生成されます。