Bagaimana saya bisa menambahkan kolom baru ke tabel inti Magento yang ada melalui skrip instal? (tanpa menggunakan SQL murni)
Saya ingin menggunakan cara Magento yang menggunakan metode alias untuk membuat skrip instalasi.
Sejauh ini saya mengikuti beberapa tutorial. Namun sepertinya tidak berfungsi dengan baik. StackOverflow ini ALTER TABLE di skrip pengaturan Magento tanpa menggunakan jawaban SQL agak mirip dengan pertanyaan saya. Tapi apa konten yang harus dimasukkan ke confg.xml
file modul ? Apakah saya hanya perlu mendefinisikan model sumber daya, model dan pengaturan data sudah cukup?
Bagian yang relevan dari config.xml
(modul saya) adalah sebagai berikut.
<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>
Dan skrip instal saya adalah sebagai berikut.
$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();
Tapi saya mendapatkan kesalahan berikut.
SQLSTATE [42S02]: Tabel dasar atau tampilan tidak ditemukan: 1146 Tabel '255.sales_flat_order' tidak ada
Setiap saran untuk memperbaikinya akan sangat dihargai.
sumber
255
?Jawaban:
sales_flat_order
adalah nama lengkap daritable
dan karenanya Anda harus menggunakan alias dalam$installer->getTable()
Pada
$installer->getTable()
parameter likemodule_alias/table_alias.
Dalam hal ini coba dengan
Saat Anda menulis ini, ia akan mengembalikan nama tabel
sales_flat_order
karena
EDIT
Anda dapat menggunakan skrip di bawah ini untuk menambahkan kolom baru. Ini berfungsi dengan baik di sistem saya
Saya menggunakan
Varien_Db_Ddl_Table::TYPE_TEXT
insted ofVarien_Db_Ddl_Table::TYPE_VARCHAR
karenaTYPE_VARCHAR
sudah usangAnda dapat memeriksa @
Varien_Db_Adapter_Pdo_Mysql::$_ddlColumnTypes
Dan Jika Anda menentukan jenis
TYPE_TEXT
tetapi mengatur panjang untuk katakanlah255
Magento akan membuatMySQL
kolomVARCHAR
jenis.sumber
Anda menyalahgunakan metode ini
addColumn
:parameter keempat adalah schemaName, dalam panggilan Anda, parameter keempat adalah
255
.Jika Anda menggunakan parameter yang tepat, itu akan berfungsi.
sumber
Saya menyadari ini adalah pertanyaan yang relatif 'lama', tetapi karena masih cukup dapat ditemukan oleh Google, saya memutuskan untuk menambahkan sedikit informasi ini.
Mengenai pertanyaan Anda, jika Anda ingin mengubah tabel penjualan / pesanan, ini tidak boleh dilakukan oleh skrip / pengaturan pemasangan tradisional. The
Mage_Catalog
modul menggunakan yang berbedaResource_Setup
kelas, yaituMage_Sales_Model_Resource_Setup
.Jika Anda ingin menambahkan atribut ke model penjualan / pesanan, untuk memastikan semuanya ditambahkan dan diproses dengan benar, tambahkan atribut Anda seperti ini:
Jika Anda bertanya - tanya mengapa , maka jawabannya ada dalam
addAttribute()
fungsiMage_Sales_Model_Resource_Setup
kelas:sumber
addAttribute
modul Sales_Order$this
installer, jawaban Anda mengarahkan saya ke arah yang benar. Terima kasih banyak!