Hallo Community,
ich versuche gerade von SW5 die Kategorien nach SW6 zu importieren. Das mache ich mit keinem externen Plugin oder mit der Import-Funktion von SW6. Ich habe ein eigenes Plugin entwickelt dafür. Ich möchte gerne, dass einmalig, wenn das Plugin installiert wurde, Kategorien in SW6 erstellt werden.
Zuerst habe ich die Datenbank-Tabelle mit den Kategorien von SW5 als JSON-Datei heruntergeladen.
Meine Idee ist nun diese Datei in SW6 zu importieren über ein Migration-Script, welches ja nur einmal ausgeführt wird.
Ich habe dazu in der Update-Funktion folgenden Code:
$germanLanguageId = $connection->fetchOne('SELECT LOWER(HEX(`id`)) FROM language WHERE name = "Deutsch"');
$englishLanguageId = $connection->fetchOne('SELECT LOWER(HEX(`id`)) FROM language WHERE name = "English"');
$rootCategoryId = $connection->fetchOne('SELECT LOWER(HEX(`id`)) FROM category WHERE parent_id IS NULL');
$rootCategoryVersionId = $connection->fetchOne('SELECT LOWER(HEX(`parent_version_id`)) FROM category WHERE id = "' . Uuid::fromHexToBytes($rootCategoryId) . '"');
foreach($categoriesDataFile[2]['data'] as $category) {
if ($category['id'] < 4) {
continue;
}
$data['id'] = Uuid::randomBytes();
$data['version_id'] = Uuid::randomBytes();
$data['parent_id'] = Uuid::fromHexToBytes($rootCategoryId);
$data['active'] = $category['active'];
$data['type'] = 'page';
$data['level'] = 2;
$data['parent_version_id'] = Uuid::fromHexToBytes($rootCategoryVersionId);
$data['after_category_version_id'] = Uuid::fromHexToBytes($rootCategoryVersionId);
$query = <<<SQL
INSERT INTO `category` (`id`, `version_id`,`created_at`,`parent_id`,`type`,`parent_version_id`,`after_category_version_id`,`level`)
VALUES (:id, :version_id, NOW(),:parent_id,:type,:parent_version_id,:after_category_version_id,:level);
SQL;
$connection->executeStatement($query, $data);
$data['language_id'] = Uuid::fromHexToBytes($germanLanguageId);
$data['name'] = $category['description'];
$data['description'] = $category['description'];
$data['meta_title'] = $category['meta_title'];
$data['meta_description'] = $category['metadescription'];
$data['keywords'] = $category['metakeywords'];
$query = <<<SQL
INSERT INTO `category_translation` (`category_id`, `category_version_id`,
`created_at`,`description`,`name`,`language_id`)
VALUES (:id,:version_id, NOW(),:description,:name,:language_id);
SQL;
$connection->executeStatement($query, $data);
break; //--- for debug. import only first category
}
Die Kategorie wird in der Datenbank scheinbar richtig erstellt, aber im Shopware-Backend wird diese Kategorie nicht angezeigt. Ich mache in den Tabellen ‚category‘ und ‚category_translation‘ Einträge. Lösche ich einen Eintrag zu Testzwecken aus der ‚category‘-Tabelle über PHPMyAdmin, so wird auch richtigerweise der Eintrag aus der ‚category_translation‘-Tabelle entfernt. Indexer habe ich auch alle aktualisiert.
Woran liegt das? Was mache ich falsch?
Verwende ich das Kategorie-Repository an anderer Stelle dafür, so funktioniert das richtig. Aber Repositories kann ich ja nicht in Migrations benutzen, oder?
Vielen Dank!
Niko