Magento 2: URL-Schlüssel für angegebenen Speicher bereits vorhanden


7

Wir haben ein Magento 2-Multisite-Setup mit eingerichteten Kategorien.

Beim Bearbeiten einiger (aber nicht aller) dieser Kategorien in verschiedenen Geschäftsansichten gibt Magento den folgenden Fehler aus und speichert keine Daten:

Geben Sie hier die Bildbeschreibung ein

In diesem Fall wurde der Name der Kategorie „Ergänzungen“ in der chinesischen Geschäftsansicht bearbeitet. In dieser Ansicht wird der Wert des Namens geändert, auf der Aktualisierungsseite wird jedoch angezeigt, dass er überhaupt nicht gespeichert wird.

Das Bearbeiten derselben Kategorie in der Standardspeicheransicht führt nicht zu demselben Problem.

Es macht keinen Unterschied, ob das Kontrollkästchen "Standard" für das URL-Schlüsselfeld in der chinesischen Geschäftsansicht deaktiviert ist

Geben Sie hier die Bildbeschreibung ein

Wir haben versucht, URL-Umschreibungen für diese Kategorie zu entfernen (basierend auf der Fehlermeldung und anderen von uns überprüften Beiträgen), aber dies hilft nicht.

Wir führen M2 Community 2.1.5 aus.

Das Problem wurde auf einen Fehler beim Speichern der Datenbank in der URL-Umschreibtabelle zurückgeführt:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '90-3' for key 'URL_REWRITE_REQUEST_PATH_STORE_ID', query was: INSERT INTO `url_rewrite` (`redirect_type`,`is_autogenerated`,`metadata`,`description`,`store_id`,`entity_type`,`entity_id`,`request_path`,`target_path`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?)

So werden mehrere Einträge auf einmal in der Umschreibtabelle gespeichert (möglicherweise entsprechend den Unterkatzen UND den zugehörigen Produkten unter der angegebenen Kategorie).

Wenn ich diesen bestimmten Wert bis zu den gespeicherten URLs zurückverfolge, habe ich diesen Eintrag im Array. “

[167] => Array
    (
        [redirect_type] => 0
        [is_autogenerated] => 1
        [metadata] => 
        [description] => 
        [entity_type] => product
        [entity_id] => 15
        [request_path] => 90-3
        [target_path] => catalog/product/view/id/15
        [store_id] => 3
    )

Ich kann keine Anforderungspfade mit "90-3" sehen. Es gibt Zielpfade mit "Katalog / Produkt / Ansicht / ID / 15", jedoch nur für Standard- und nz- Site. Ich habe versucht, diese zu löschen, aber das hat nicht geholfen.

Antworten:


7

Ich habe dieses Problem behoben. Und ich habe 2 Lösungen dafür.

Die erste : Bereinigen Sie Ihre Datenbank in der Tabelle url_rewrite (Ändern Sie den url_key aller Kategorien). Sie können ein UpgradeData-Skript für diese Lösung schreiben.

Die zweite : Entfernen Sie die Duplizierungsdaten beim Speichern der Kategorie. Diese Daten werden in die Methode doReplace ($ urls) in der \vendor\magento\module-url-rewrite\Model\Storage\DbStorage.phpDatei geworfen .

protected function doReplace($urls)
    {
        foreach ($this->createFilterDataBasedOnUrls($urls) as $type => $urlData) {
            $urlData[UrlRewrite::ENTITY_TYPE] = $type;
            $this->deleteByData($urlData);
        }
        $data = [];
        foreach ($urls as $url) {
            $data[] = $url->toArray();
        }
        $this->insertMultiple($data);
    } 

Nach dem Debuggen habe ich herausgefunden, dass $ data variable einen doppelten Datensatz hat. Wenn Sie möchten, dass diese Methode fehlerfrei funktioniert. Schreiben Sie diese Methode wie folgt um:

protected function doReplace($urls)
{
    foreach ($this->createFilterDataBasedOnUrls($urls) as $type => $urlData) {
        $urlData[UrlRewrite::ENTITY_TYPE] = $type;
        $this->deleteByData($urlData);
    }
    $data = [];
    $storeId_requestPaths = [];
    foreach ($urls as $url) {
        $storeId = $url->getStoreId();
        $requestPath = $url->getRequestPath();
        // Skip if is exist in the database
        $sql = "SELECT * FROM url_rewrite where store_id = $storeId and request_path = '$requestPath'";
        $exists = $this->connection->fetchOne($sql);

        if ($exists) continue;

        $storeId_requestPaths[] = $storeId . '-' . $requestPath;
        $data[] = $url->toArray();
    }

    // Remove duplication data;
    $n = count($storeId_requestPaths);
    for ($i = 0; $i < $n - 1; $i++) {
        for ($j = $i + 1; $j < $n; $j++) {
            if ($storeId_requestPaths[$i] == $storeId_requestPaths[$j]) {
                unset($data[$j]);
            }
        }
    }
    $this->insertMultiple($data);
}

Wenn Sie mehr Details erhalten möchten. Bitte lesen Sie meinen Kommentar in

https://github.com/magento/magento2/issues/7298

Hoffe das wird dir helfen.


Diese Lösung funktioniert bei mir nicht. Es ist ein Fehler aufgetreten. Beim Speichern der Kategorie ist ein Fehler aufgetreten.
Jigs Parmar

@jigsparmar Entschuldigung für die verspätete Antwort, in Ihrem Fall könnten es einige andere Fehler sein. Sie sollten mit der Funktion zum Speichern von Kategorien debuggen und sehen, was das Problem verursacht.
Toan Tam

Ich habe diesen Code hinzugefügt, aber beim Speichern der Kategorie wird ein Fehler angezeigt: Beim Speichern der Kategorie ist ein Fehler aufgetreten.
Kishan Patadia

Ich denke, es ist ein weiterer Fehler. Kein URL-Schlüsselproblem. In Ihrem Fall sollten Sie im Protokoll prüfen, ob es eine Ausnahme gibt.
Toan Tam

1
Die Lösung hat bei mir funktioniert, aber es ist jetzt möglich, Kategorien mit derselben URL zu
erstellen,

2

Dies ist ein anerkannter Fehler von Magento 2. Hier ist eine Problemumgehung dafür. Ich gehe davon aus, dass Sie bereits wissen, wie man ein Plugin / eine Präferenz für Magento 2 erstellt.

Modul-Katalog-URL-Umschreiben / Modell / Produkt / AnchorUrlRewriteGenerator.php (L58)

/**
 * Generate list based on categories
 *
 * @param int $storeId
 * @param Product $product
 * @param ObjectRegistry $productCategories
 * @return UrlRewrite[]
 */
public function generate($storeId, Product $product, ObjectRegistry $productCategories)
{
    $urls = [];
    foreach ($productCategories->getList() as $category) {
        $anchorCategoryIds = $category->getAnchorsAbove();
        if ($anchorCategoryIds) {
            foreach ($anchorCategoryIds as $anchorCategoryId) {
                //Default: $anchorCategory = $this->categoryRepository->get($anchorCategoryId);
                $anchorCategory = $this->categoryRepository->get($anchorCategoryId, $storeId);
                $urls[] = $this->urlRewriteFactory->create()
                    ->setEntityType(ProductUrlRewriteGenerator::ENTITY_TYPE)
                    ->setEntityId($product->getId())
                    ->setRequestPath(
                        $this->urlPathGenerator->getUrlPathWithSuffix(
                            $product,
                            $storeId,
                            $anchorCategory
                        )
                    )
                    ->setTargetPath(
                        $this->urlPathGenerator->getCanonicalUrlPath(
                            $product,
                            $anchorCategory
                        )
                    )
                    ->setStoreId($storeId)
                    ->setMetadata(['category_id' => $anchorCategory->getId()]);
            }
        }
    }

    return $urls;
}

module-catalog-url-rewrite / Model / ProductUrlRewriteGenerator.php (L146)

/**
 * Generate list of urls for global scope
 *
 * @param \Magento\Framework\Data\Collection $productCategories
 *
 * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[]
 */
protected function generateForGlobalScope($productCategories)
{
    $urls = [];
    $productId = $this->product->getEntityId();
    foreach ($this->product->getStoreIds() as $id) {
        if (!$this->isGlobalScope($id)
            && !$this->storeViewService->doesEntityHaveOverriddenUrlKeyForStore($id, $productId, Product::ENTITY)
        ) {
            // Default: $urls = array_merge($urls, $this->generateForSpecificStoreView($id, $productCategories));

            // before loading the category collection by looping it, clone it and set the correct store id,
            // so we get the correct url_path & url_key for that specific store id
            $storeSpecificProductCategories = clone $productCategories;
            $storeSpecificProductCategories->setStoreId($id);

            $urls = array_merge($urls, $this->generateForSpecificStoreView($id, $storeSpecificProductCategories));
        }
    }
    return $urls;
}

Hoffe das hilft.


Wann sollte ich Before oder After oder Around Event verwenden müssen?
Pramod Kharade

nicht für mich arbeiten
Jigs Parmar

0

90-3 bedeutet URL-Schlüssel 90 für store_id 3. Sie müssen nach zwei Einträgen mit dem URL-Schlüssel 90 suchen. Im Allgemeinen wird das Problem durch den URL-Schlüssel eines Produkts unter dieser Kategorie verursacht. Sie können auch zur Varchar-Tabelle der Katalogproduktentität gehen und nach dem Produkt mit dem URL-Schlüssel 90 suchen. Ich denke, 119 ist die Attribut-ID für den URL-Schlüssel. Ändern Sie den URL-Schlüssel dieses Produkts


0

Ich hatte auch das gleiche Problem beim Hinzufügen / Bearbeiten von Kategorien.

Zuerst stellte ich fest, dass in der Tabelle "catalog_category_entity_varchar" eine falsche Attribut-ID für url_key und url_path vorhanden war. Dann habe ich die genaue Attribut-ID beider Attribute überprüft ('url_key' und 'url_path').

zB in der Tabelle "catalog_category_entity_varchar" wurden '117' und '118' angezeigt, aber die genaue ID war '119' und '120'. Dann fand ich einige Zeilen in der Tabelle "catalog_category_entity_varchar" mit diesen (korrekte ID '119', '120').

Ich habe die folgenden Schritte ausgeführt, um das Problem zu beheben.

  • Zuerst habe ich Zeilen in "catalog_category_entity_varchar" gesucht, in denen sich die Attribut-ID befindet (117,118), und die Daten aus der Tabelle exportiert.
  • Dann habe ich Zeilen in "catalog_category_entity_varchar" gesucht, in denen sich die Attribut-ID befindet (117,118,119,120), und diese Daten (Zeilen) aus der Tabelle gelöscht.
  • Dann habe ich einfach die exportierte Datei in Notepad ++ geöffnet und die Attribut-IDs 117 mit 119 und 118 mit 120 geändert und die Daten erneut importiert.

Stellen Sie sicher, dass Sie die Sicherung der Datenbank durchführen, bevor Sie die obigen Schritte ausführen.


0

Nach einer Woche war das einzige, was für mich funktionierte, https://www.safemage.com/url-optimization-after-migration-magento-2.html. Es ist ein kostenpflichtiges Modul - 69 US-Dollar. Der Support antwortet, wenn Sie Fragen haben. Das Schlimme ist, dass Sie das Plugin für immer behalten müssen oder bis der Fehler vom Magento-Team behoben wurde ... Ich musste ein Downgrade auf 2.2.7 durchführen, um es zu verwenden. Es heißt, es funktioniert auf 2.3, aber es funktioniert nicht. Hier ist ein Zitat aus dem Link:

Die Migration von Magento 1 zu Magento 2 führt häufig zu einem Problem beim Speichern einiger Kategorien im Backend. Es wird der unvermeidbare Fehler "URL-Schlüssel für den angegebenen Speicher ist bereits vorhanden" angezeigt. Unser Team hat das Problem gründlich untersucht und ist zu dem Schluss gekommen, dass es keine einheitliche und zuverlässige Lösung gibt, um das Problem zu lösen. Selbst wenn Sie alle duplizierten URLs entfernen könnten, würde der Fehler nach einem weiteren "Speichern" -Verfahren erneut auftreten.


Bitte fügen Sie Details vom Link zu dieser Antwort hinzu, da der Link möglicherweise absolut wird.
Jai

0

Nachdem ich tagelang nach dem Internet gesucht habe, kann ich keine genaue Lösung dafür finden. Dann habe ich festgestellt, wenn wir den URLKEY der Kategorie ändern, wird dieser Fehler nicht angezeigt, also habe ich dies getan.

$category->setPath($parentCategory->getPath())
            ->setParentId($parentId)
            ->setName('test1')
            ->setIsActive(true)
            ->setUrlKey(rand(1,1000000000));

        $category->save();

Ich benutze die Zufallsfunktion, um eine Kategorie in der Datenbank hinzuzufügen, ohne zufällig -> setUrlKey (rand (1,1000000000)); Sie können alles hinzufügen, wie beispielsweise einen doppelten Kategorienamen mit einem zufälligen Nein usw., und Fehler sind verschwunden, wenn es Ihnen hilft, ein UP zu geben. Vielen Dank


-2

Versuchen Sie einfach, die Tabelle url_rewrite abzuschneiden und erneut zu indizieren. Alle URL-Schlüssel werden automatisch erstellt.

Hinweis: Bitte nehmen Sie die Tabelle vor dem Abschneiden wieder auf.


1
Sie werden nicht automatisch neu erstellt. Magento hat diese Funktionalität entfernt.
Adad64
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.