Frage

Für ein Attribut, das als Dropdown eingerichtet ist, soll dies ein sein int oder ein varchar?

Ich fixiere einen Katalog von Produkten, den jemand anderes importiert hat, und ich sehe ein Größenattribut als Dropdown als eine int Typ (backend Säule in eav_attributes), aber die Ganzzahlwerte werden in der gespeichert catalog_product_entity_varchar Tisch. Die einfachen Produkte glauben also, dass sie keine Größen zugewiesen haben.

Darüber hinaus dachte ich, wenn die Varchar EAV -Tabelle Dropdown -Werte aufwies, speichert sie sie als Zeichenfolge, nicht als Ganzzahl, die auf die EAV -Tabelle hinweist. Ich habe gesehen, wie ein Dropdown -Attribut seine Werte in der gespeichert hat ..._varchar Tabelle als tatsächliche Zeichenfolgenwerte und nicht eine Zahl, die sich auf die EAV -Attriute -Tabelle zurückführte, weil sie als erstellt wurde varchar Während einer Erweiterungsinstallation.

Also, meine Fragen sind ..

  1. Ein Dropdown -Attribut erhält einen Backend -Typ von int Wenn Sie im Administrator erstellt werden, aber wenn Sie über eine Erweiterung ein Attribut erstellen, können Sie diese Spalte als a installieren varchar. Ist es wirklich wichtig, ob ein Dropdown -Attribut ein ist int oder ein varchar Typ?

  2. In Bezug auf den Katalog, den ich fixiere, bin ich mir nicht ganz sicher, was der ursprüngliche Entwickler getan hat. Er benutzte keine Textdatei, um die Produkte zu importieren. Aus den Skripten, die ich habe, die im Produktimport verwendet wurden, speichert er die Produkte programmatisch mit Daten, die er hatte (dh Via $product->save()). Aber wie wurde dieses Dropdown -Attribut als erstellt als int Backend, landete aber in der catalog_product_entity_varchar Tabelle mit numerischen Zeichenfolgen, die darauf hinweisen eav_attribute_option. Ich habe überprüft, ob diese "varchar" -Werte auf tatsächliche Einträge in zeigen eav_attribute_option.

  3. Wenn das Dropdown -Attribut als eingerichtet wurde varchar Backend -Typ, Woher weiß Magento, dass er sich auf die EAV -Optionen mit den numerischen VARCHAR -Werten beziehen soll, anstatt nur den Attributwert als "1" oder "2" zuzuweisen (wie in Größe 1, 2 usw. anstelle von klein, mittel usw. .)? Ich gehe davon aus, dass dies daran liegt, dass es als Dropdown eingerichtet wurde, wollte aber nur überprüfen.

War es hilfreich?

Lösung

Nehmen wir sie einzeln.

  1. Sie sollten die verwenden int Werte für Konsistenz. Aber (wie du gesehen hast) funktioniert es mit varchar Auch. Ich habe eine Ahnung, mit der es funktioniert text zu.

  2. "Wie wurde dieses Dropdown -Attribut als INT -Backend erstellt, landete jedoch im Catalog_Product_entity_varchar". Das ist ein komplettes Rätsel. Nur der ursprüngliche Entwickler kann Ihnen das sagen (vielleicht nicht einmal er). Aber ich kann Ihnen sagen, wie es möglich ist, auf die zu verweisen eav_attribute_option Tisch. Dies liegt daran, dass sich die Attributoptionen nicht um den Typ des Attributs kümmern. Wenn das Attribut a hat source_model es ruft getAllOptions Aus diesem Quellmodell und dem Wert des Produkts übereinstimmt mit dem, was es im Ergebnis von findet von getAllOptions.

  3. Ich denke, die Antwort auf Nummer 2 wird auch Nummer 3 beantworten. Darüber hinaus ist PHP eine lockere Programmiersprache und eine lose Typing -Sprache und 3 == "3" bewertet true.

Andere Tipps

Zusätzlich zu Marius 'Antwort: Ich bin mir da nicht zu 100% sicher - ich denke, wenn Sie programmgesteuert ein Dropdown -Attribut als Typ erstellen varchar und fügen Sie Optionen hinzu, aber später speichern Sie das Attribut über den Administrator (Katalog -> Attribute -> Attribute verwalten), es ändert den Typ aus dem Typ aus varchar zu int. Auf diese Weise haben Sie ein Attribut mit Typ int, aber mit seinen Werten, die tatsächlich in der gespeichert sind catalog_product_entity_varchar Tisch.

Ein seltsamer Nebeneffekt davon ist, dass einige Dinge weiterhin normal funktionieren, aber sobald Sie dies tun addAttributeToFilter, Es gibt Ihnen keine Ergebnisse mehr.

Bearbeiten: Ich habe das gerade getestet und es ist wie oben beschrieben. Wenn Sie ein Attribut speichern mit input wie select Durch den Verwaltungsbereich wird es die ändern type zu int, auch wenn es war varchar Vor. Aus irgendeinem Grund funktionieren alle Beschriftungen/Optionen weiter, aber die Filterung funktioniert nicht mehr, da sie in der falschen Tabelle nach Werten suchen.

Ich habe das gleiche Problem mit einem benutzerdefinierten Importmodul gestoßen. Die Attribute wurden mit Dropdown- und Backend -Typ 'varchar' erstellt. Die Produkte waren im Backend einwandfrei, würden jedoch nicht in Frontend -Kategorien auftauchen.

Es funktionierte nur, wenn wir den Import neu gestaltet haben, wobei Attribute mit Backend -Typ 'int' eingestuft wurden. Jetzt werden die Produkte gut angezeigt und Attributwerte werden in der Tabelle "_int" angezeigt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top