Jak mogę dodać nową kolumnę do istniejącej tabeli podstawowej Magento za pomocą skryptu instalacyjnego? (bez użycia czystego SQL)
Chcę użyć metody Magento, która używa metod aliasowych do tworzenia skryptu instalacyjnego.
Do tej pory wykonałem kilka samouczków. Ale wydaje się, że nie działa poprawnie. Ten StackOverflow ALTER TABLE w skrypcie instalacyjnym Magento bez użycia odpowiedzi SQL był nieco podobny do mojego pytania. Ale jaką treść należy umieścić w confg.xml
pliku modułu ? Czy wystarczy zdefiniować model zasobów, model i dane konfiguracji, które wystarczyłyby?
Odpowiednia część config.xml
(mojego modułu) jest następująca.
<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>
Mój skrypt instalacyjny wygląda następująco.
$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();
Ale pojawia się następujący błąd.
SQLSTATE [42S02]: Nie znaleziono tabeli podstawowej lub widoku: 1146 Tabela „255.sales_flat_order” nie istnieje
Wszelkie sugestie dotyczące rozwiązania tego problemu będą mile widziane.
źródło
255
?Odpowiedzi:
sales_flat_order
to pełna nazwatable
i dlatego musisz używać aliasu w$installer->getTable()
W
$installer->getTable()
parametrze jakmodule_alias/table_alias.
W takim przypadku spróbuj
Kiedy to napiszesz, zwróci nazwę tabeli
sales_flat_order
dlatego
EDYTOWAĆ
Możesz użyć poniższego skryptu, aby dodać nową kolumnę. Działa dobrze w moim systemie
Używam
Varien_Db_Ddl_Table::TYPE_TEXT
insted,Varien_Db_Ddl_Table::TYPE_VARCHAR
ponieważTYPE_VARCHAR
jest przestarzałeMożesz sprawdzić @
Varien_Db_Adapter_Pdo_Mysql::$_ddlColumnTypes
Jeśli podasz typ,
TYPE_TEXT
ale ustawisz długość, powiedzmy, że255
Magento utworzyMySQL
kolumnęVARCHAR
typu.źródło
Nadużywasz metody
addColumn
:czwartym parametrem jest nazwa schematu, w twoim wywołaniu czwartym parametrem jest
255
.Jeśli użyjesz odpowiednich parametrów, powinno to działać.
źródło
Zdaję sobie sprawę, że jest to stosunkowo „stare” pytanie, ale ponieważ Google wciąż dość łatwo je znaleźć, postanowiłem dodać tę odrobinę informacji.
Jeśli chodzi o twoje pytanie, jeśli chcesz zmienić tabelę sprzedaży / zamówienia, nie powinno tego robić tradycyjne skrypty instalacyjne / konfiguracja.
Mage_Catalog
Moduł wykorzystuje innąResource_Setup
klasę, a mianowicieMage_Sales_Model_Resource_Setup
.Jeśli chcesz dodać atrybuty do modelu sprzedaży / zamówienia, aby upewnić się, że wszystko zostało poprawnie dodane i przetworzone, dodaj swój atrybut w następujący sposób:
Jeśli zastanawiasz się, dlaczego , to odpowiedź należy do
addAttribute()
funkcjiMage_Sales_Model_Resource_Setup
klasy:źródło
addAttribute
modułu Sales_Order$this
instalatora, twoja odpowiedź wskazała mi właściwy kierunek. Dziękuję bardzo!