Wie kann ich eine neue Spalte über ein Installationsskript zu einer vorhandenen Magento-Kerntabelle hinzufügen? (ohne Verwendung von reinem SQL)
Ich möchte die Magento-Methode verwenden, die Alias-Methoden verwendet, um ein Installationsskript zu erstellen.
Bisher habe ich nur wenige Tutorials besucht. Scheint aber nicht richtig zu funktionieren. Dieses StackOverflow ALTER TABLE im Magento-Setup-Skript ohne SQL- Antwort war meiner Frage etwas ähnlich. Aber was soll der Inhalt in die confg.xml
Datei des Moduls geschrieben werden? Muss ich nur ein Ressourcenmodell definieren, wären Modell- und Konfigurationsdaten ausreichend?
Der relevante Teil von config.xml
(meines Moduls) ist wie folgt.
<config>
. . .
<global>
<models>
<mymodule>
<class>Mynamespace_Mymodule_Model</class>
<resourceModel>mymodule_resource</resourceModel>
</mymodule>
<mymodule_resource>
<class>Mynamespace_Mymodule_Model_Resource</class>
</mymodule_resource>
</models>
<resources>
<mymodule_setup>
<setup>
<module>Mynamespace_Mymodule</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</mymodule_setup>
<mymodule_read>
<connection>
<use>core_read</use>
</connection>
</mymodule_read>
<mymodule_write>
<connection>
<use>core_write</use>
</connection>
</mymodule_write>
</resources>
. . . .
</config>
Und mein Installationsskript ist wie folgt.
$installer = $this;
$installer->startSetup();
$installer->getConnection()
->addColumn($installer->getTable('sales_flat_order'),'custom_value', Varien_Db_Ddl_Table::TYPE_VARCHAR, 255, array(
'nullable' => false,
), 'Title');
$installer->endSetup();
Aber ich erhalte den folgenden Fehler.
SQLSTATE [42S02]: Basistabelle oder Sicht nicht gefunden: 1146 Tabelle '255.sales_flat_order' existiert nicht
Jeder Vorschlag, dies zu beheben, wäre willkommen.
quelle
255
?Antworten:
sales_flat_order
ist der vollständige Name vontable
und daher muss in alias verwendet werden$installer->getTable()
In
$installer->getTable()
Parameter wiemodule_alias/table_alias.
In diesem Fall versuchen Sie es mit
Wenn Sie dies schreiben, wird der Tabellenname zurückgegeben
sales_flat_order
da
BEARBEITEN
Sie können das folgende Skript verwenden, um eine neue Spalte hinzuzufügen. Es funktioniert gut in meinem System
Ich benutze
Varien_Db_Ddl_Table::TYPE_TEXT
Insted vonVarien_Db_Ddl_Table::TYPE_VARCHAR
weilTYPE_VARCHAR
es veraltet istDu kannst nachschauen @
Varien_Db_Adapter_Pdo_Mysql::$_ddlColumnTypes
Und wenn Sie den Typ angeben,
TYPE_TEXT
aber die Länge so festlegen , dass255
Magento eineMySQL
Spalte mit demVARCHAR
Typ erstellt.quelle
Sie missbrauchen die Methode
addColumn
:Der vierte Parameter ist der schemaName. In Ihrem Aufruf ist der vierte Parameter
255
.Wenn Sie die richtigen Parameter verwenden, sollte es funktionieren.
quelle
Mir ist klar, dass dies eine relativ "alte" Frage ist, aber da sie von Google immer noch ziemlich auffindbar ist, habe ich beschlossen, diese Informationen hinzuzufügen.
In Bezug auf Ihre Frage, wenn Sie die Verkaufs- / Auftragstabelle ändern möchten, sollte dies nicht mit den herkömmlichen Installationsskripten / -setups erfolgen. Das
Mage_Catalog
Modul verwendet eine andereResource_Setup
Klasse, nämlichMage_Sales_Model_Resource_Setup
.Wenn Sie dem Verkaufs- / Auftragsmodell Attribute hinzufügen möchten, fügen Sie Ihr Attribut folgendermaßen hinzu, um sicherzustellen, dass alles korrekt hinzugefügt und verarbeitet wird:
Wenn Sie sich fragen, warum , dann liegt die Antwort in der
addAttribute()
Funktion derMage_Sales_Model_Resource_Setup
Klasse:quelle
addAttribute
für Sales_Order-Modul verwenden$this
Installer verwendet. Ihre Antwort hat mich in die richtige Richtung geleitet. Ich danke dir sehr!