Comment puis-je ajouter une nouvelle colonne à la table principale Magento existante via le script d'installation? (sans utiliser du SQL pur)
Je veux utiliser la méthode Magento qui utilise des méthodes d'alias pour créer un script d'installation.
Jusqu'à présent, j'ai suivi quelques tutoriels. Mais semble ne pas fonctionner correctement. Cette ALTER TABLE StackOverflow dans le script d'installation de Magento sans utiliser de réponse SQL était quelque peu similaire à ma question. Mais quel est le contenu à mettre dans le confg.xml
fichier du module ? Dois-je simplement définir le modèle de ressource, le modèle et les données de configuration seraient suffisants?
La partie pertinente du config.xml
(de mon module) est la suivante.
<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>
Et mon script d'installation est le suivant.
$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();
Mais j'obtiens l'erreur suivante.
SQLSTATE [42S02]: table ou vue de base introuvable: 1146 La table '255.sales_flat_order' n'existe pas
Toute suggestion pour résoudre ce problème serait appréciée.
la source
255
?Réponses:
sales_flat_order
est le nom complet dutable
et vous devez donc utiliser l'alias dans$installer->getTable()
En
$installer->getTable()
paramètre commemodule_alias/table_alias.
Dans ce cas, essayez avec
Lorsque vous écrivez ceci, il renverra le nom de la table
sales_flat_order
car
MODIFIER
Vous pouvez utiliser le script ci-dessous pour ajouter une nouvelle colonne. Cela fonctionne bien dans mon système
J'utilise
Varien_Db_Ddl_Table::TYPE_TEXT
insted ofVarien_Db_Ddl_Table::TYPE_VARCHAR
carTYPE_VARCHAR
est obsolèteTu peux vérifier @
Varien_Db_Adapter_Pdo_Mysql::$_ddlColumnTypes
Et si vous spécifiez le type
TYPE_TEXT
mais définissez la longueur pour dire que255
Magento créera uneMySQL
colonne deVARCHAR
type.la source
Vous abusez de la méthode
addColumn
:le quatrième paramètre est schemaName, dans votre appel, le quatrième paramètre est
255
.Si vous utilisez les bons paramètres, cela devrait fonctionner.
la source
Je me rends compte que c'est une question relativement «ancienne», mais comme Google la trouve encore assez facilement, j'ai décidé d'ajouter ce morceau d'information.
En ce qui concerne votre question, si vous souhaitez modifier le tableau des ventes / commandes, cela ne doit pas être fait par les scripts d'installation / configuration traditionnels. Le
Mage_Catalog
module utilise uneResource_Setup
classe différente , à savoirMage_Sales_Model_Resource_Setup
.Si vous souhaitez ajouter des attributs au modèle de vente / commande, afin de vous assurer que tout est ajouté et traité correctement, ajoutez votre attribut comme ceci:
Si vous vous demandez pourquoi , alors la réponse est dans la
addAttribute()
fonction de laMage_Sales_Model_Resource_Setup
classe:la source
addAttribute
pour le module Sales_Order$this
installateur, votre réponse m'a indiqué la bonne direction. Merci beaucoup!