Magento 1 собственная таблица базы данных

Я пытаюсь для моего модуля Magento 1 создать собственную таблицу базы данных. Я вижу мою запись установки в таблице core_resource, но моя таблица не создана.

Это мой config.xml:

<config>
<modules>
    <UF_MagentoAdminScriptQueue>
        <version>1.0.0</version>
        <active>true</active>
        <codePool>community</codePool>
        <depends>
            <Mage_Adminhtml />
        </depends>
        <extension_name>MagentoAdminScriptQueue</extension_name>
    </UF_MagentoAdminScriptQueue>
</modules>

<global>
    <models>
        <magentoadminscriptqueue>
            <class>UF_MagentoAdminScriptQueue_Model</class>
            <resourceModel>uf_magentoadminscriptqueue_resource</resourceModel>
        </magentoadminscriptqueue>
        <uf_magentoadminscriptqueue_resource>
            <class>UF_MagentoAdminScriptQueue_Model_Resource</class>
            <entities>
                <queue>
                    <table>uf_adminscriptqueue_queue</table>
                </queue>
            </entities>
        </uf_magentoadminscriptqueue_resource>
    </models>
    <resources>
        <magentoadminscriptqueue_setup>
            <setup>
                <module>UF_MagentoAdminScriptQueue</module>
            </setup>
        </magentoadminscriptqueue_setup>
    </resources>
    <blocks>
        <magentoadminscriptqueue>
            <class>UF_MagentoAdminScriptQueue_Block</class>
        </magentoadminscriptqueue>
    </blocks>
    <helpers>
        <magentoadminscriptqueue>
            <class>UF_MagentoAdminScriptQueue_Helper</class>
        </magentoadminscriptqueue>
    </helpers>
</global>

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <magentoadminscriptqueue before="Mage_Adminhtml">UF_MagentoAdminScriptQueue_Adminhtml</magentoadminscriptqueue>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>

Это мой Installationscript sql/mysql4-install-1.0.0.php:

$installer = $this;
$installer->startSetup();

$queueTable = $installer->getTable('uf_adminscriptqueue/queue');

if ($installer->getConnection()->isTableExists($queueTable))
    $installer->getConnection()->dropTable($queueTable);

$table = $installer->getConnection()->newTable($queueTable)
    ->addColumn(
        'entity_id',
        Varien_Db_Ddl_Table::TYPE_INTEGER,
        null,
        array(
            'unsigned' => true,
            'nullable' => false,
            'primary'  => true,
            'identity' => true,
        ),
        'Entity Id'
    )
    ->addColumn(
        'slug',
        Varien_Db_Ddl_Table::TYPE_VARCHAR,
        40,
        array(
            'default' => null,
        ),
        'Slug'
    )
    ->addColumn(
        'name',
        Varien_Db_Ddl_Table::TYPE_VARCHAR,
        40,
        array(
            'default' => null,
        ),
        'Name'
    )
    ->addColumn(
        'status',
        Varien_Db_Ddl_Table::TYPE_SMALLINT,
        null,
        array(
            'unsigned' => true,
            'nullable' => false,
            'default'  => UF_MagentoAdminScriptQueue_Model_Offer::STATUS_NOTRUNNING,
        ),
        'Status'
    )
    ->addColumn(
        'last_run',
        Varien_Db_Ddl_Table::TYPE_DATETIME,
        null,
        array(
            'default'  => null,
        ),
        'Created At'
    )
    ->setComment('UF Script Queue Table');
$installer->getConnection()->createTable($table);

$scripts = array(
    array(
        'slug' => 'getCategories',
        'name' => 'Get Categories'
    ),
    array(
        'slug' => 'importCategories',
        'name' => 'Import Categories'
    ),
    array(
        'slug' => 'exportProductToCsv',
        'name' => 'Export Products to CSV'
    ),
    array(
        'slug' => 'updateMediaGallery',
        'name' => 'Update Media Gallery'
    ),
);

foreach ($scripts as $script) {
    Mage::getModel('uf_adminscriptqueue/queue')
        ->setData($script)
        ->save();
}

$installer->endSetup();

Тогда у меня есть UF_MagentoAdminScriptQueue_Model_Script в каталоге моделей:

class UF_MagentoAdminScriptQueue_Model_Script extends Mage_Core_Model_Abstract
{
    const STATUS_NOTRUNNING = 1;
    const STATUS_RUNNING    = 2;
    const STATUS_INQUEUE    = 3;

    /**
     * Init
     */
    protected function _construct()
    {
        $this->_init('uf_adminscriptqueue/queue');
    }

    /**
     * Processing object before save data
     *
     * @return Mage_Core_Model_Abstract
     */
    protected function _beforeSave()
    {
        parent::_beforeSave();
    }

    /**
     * Save queue related objects
     *
     * @return $this
     */
    protected function _afterSave()
    {
        return parent::_afterSave();
    }
}

Я не показываю код для ресурса и класса коллекции, в этих файлах только конструктор с инициализацией 'uf_adminscriptqueue/queue'.

Кто-нибудь знает, что я делаю не так?

Ура Керстель

0 ответов

Ошибка в расположении файла: согласно вашему config.xml скрипт установки должен быть помещен в:

sql/magentoadminscriptqueue_setup/

папка, а не в sql. Также я предлагаю установить https://packagist.org/packages/n98/magerun. Это поможет вам увидеть, что на самом деле будет применено при запуске setup: upgrade.

$ php vendor/bin/n98-magerun sys:set:in

Перед тем, как запускать эту команду, удалите из core_resource запись, относящуюся к установленной версии модуля. Не забывайте о кешах: очистите их перед повторным запуском скрипта установки.

Другие вопросы по тегам