magento在现有表中添加列

时间:2016-09-25 10:54:31

标签: php magento

我是Magento的新手。我想在newsletter_subscriber表格中添加一列,以便在mysql4-upgrade-1.6.0.0-1.6.0.1.php

中创建一个新文件app/code/core/mage/newsletter_setup/
<?php
$installer = $this;
$installer->startSetup();
$installer->getConnection()->addColumn(
    $this->getTable('newsletter/subscriber'), //table name 
    'groupid',                                //column name
    'varchar(100) NOT NULL'                   //datatype definition
);

$installer->endSetup();

?>

我更新了配置文件:

<modules>
    <Mage_Newsletter>
        <version>1.6.0.0</version> 
    </Mage_Newsletter>
</modules>

它没有用,请指导我做错了

3 个答案:

答案 0 :(得分:5)

不建议添加/修改或更改任何核心文件。最好是制作一个新模块来添加额外的列。

您必须在app/code/local/your/module/sql/your_module_setup/upgrade-0.1.2-0.1.3.php文件中提及正确的模块升级版本。 (这意味着您将模块版本从0.1.2升级到0.1.3)。如果您没有使用升级脚本,请记住在模块<resources>中定义config.xml,并且设置脚本名称为mysql4-install-0.1.0.php

下面是Mysql设置脚本文件 - upgrade-0.1.2-0.1.3.php

    <?php
        ini_set('display_errors', '1');

        $installer = $this;
        $installer->startSetup();
        $installer->getConnection()
                 ->addColumn(
                  $installer->getTable('newsletter/subscriber'), //Get the newsletter Table
                  'your_field_name', //New Field Name
             array(
               'type'      => Varien_Db_Ddl_Table::TYPE_TEXT, //Field Type like TYPE_INTEGER ...
               'nullable'  => true,
               'length'    => 255,
               'default'   => 'Some thing default value',
               'comment'   => 'Your field comment'
            )
        );             
        $installer->endSetup();
        ?>

之后更改app / code / local / your / module / etc / config.xml版本,例如

<config>
    <modules>
        <NameSpace_ModuleName>
            <version>0.1.3</version> <!-- if upgrade script version is 0.1.3 -->
        </NameSpace_ModuleName>
    </modules>
   <global>
     <resources>
        <NameSpace_ModuleName_setup>
            <setup>
                <module>NameSpace_ModuleName</module>
                <class>Mage_Catalog_Model_Resource_Setup</class>
            </setup>
            <connection>
                <use>core_setup</use>
            </connection>
        </NameSpace_ModuleName_setup>
      </resources>
   </global>
</config>

答案 1 :(得分:2)

使用设置脚本,它们将根据模块版本的变化执行。

在您的情况下,您的文件名为[ 5 6 7 8 ] mysql4-upgrade-1.6.0.0- ,而您的版本为1.6.0.1.php。要使此特定脚本执行,您需要将版本提升为1.6.0.0

话虽如此 - 您正在为核心Magento模块添加功能,这是不好的做法。您应该将其移动到本地池(1.6.0.1)模块中。

答案 2 :(得分:0)

只需在dbscripts文件夹中创建一个脚本,然后从终端或Web浏览器运行该文件即可。

例如,将文件保存在pub/dbscripts/filename.php中,粘贴此代码并根据您的要求进行更改

<?php
use Magento\Framework\App\Bootstrap;
require '../../app/bootstrap.php';
$bootstrap = Bootstrap::create(BP, $_SERVER);
$obj = $bootstrap->getObjectManager();
$state = $obj->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
error_reporting(E_ALL);
ini_set('display_errors', 1);
$resource = $objectManager->get('Magento\Framework\App\ResourceConnection');
$connection = $resource->getConnection();

$salesTable = $resource->getTableName('Table_Name');
$sql = "ALTER TABLE ".$salesTable. " ADD `Field_name` varchar(255)";
$connection->query($sql);

echo"Script Run Successfully";

从浏览器(如

)运行此文件
domain.name/pub/dbscripts/filename.php