Определите Несколько Имен Таблиц В Файле Конфигурации XML


Я создаю две таблицы базы данных как часть нового расширения. Я могу создать одну таблицу просто отлично, но при попытке создать две таблицы я получаю следующее сообщение об ошибке:

PDOException: SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'awesome_ness' already exists

Вот мой config.xml запись:

<models>
    <awesome_ness>
        <class>Awesome_Ness_Model</class>
        <resourceModel>ness_resource</resourceModel>
    </awesome_ness>
    <ness_resource>
        <class>Awesome_Ness_Model_Resource</class>
        <entities>
            <ness>
                <table>awesome_ness</table>
            </ness>
        </entities>
    </ness_resource>
</models>

В моем install-1.0.0.php сценарий, у меня есть два определения createTable, например:

<?php
$installer = $this;

$installer->startSetup();

$table_one = $installer->getConnection()
    ->newTable($installer->getTable('awesome_ness/ness'))
    ->addColumn('...');
$installer->getConnection()->createTable($table_one);

$table_two = $installer->getConnection()
    ->newTable($installer->getTable('awesome_ness/ness'))
    ->addColumn('...');
$installer->getConnection()->createTable($table_two);

$installer->endSetup();

Думаю, мне нужно знать, как создать два определения <table></table>. Заранее спасибо.

Author: Jongosi, 2013-06-05

2 answers

Дело в том, что вы пытаетесь создать две таблицы для одной и той же сущности. И поскольку сущность может иметь одно имя таблицы (которое взято из xml), вы создадите две таблицы с одинаковым именем. Для создания этой второй таблицы вам потребуется указать вторую запись сущности в XML-файле.

<entities>
    <ness>
        <table>awesome_ness</table>
    </ness>
    <foo>
        <table>awesome_foo<table>
    </foo>
</entities>

Затем в вашем сценарии установки для второй таблицы вы вызываете

$installer->getTable('awesome_ness/foo')

Вместо

$installer->getTable('awesome_ness/ness')
 7
Author: Dan, 2013-06-05 23:08:08

Я давно этого не делал, и я не проверял свою работу, НО

Когда вы говорите

$installer->getTable('awesome_ness/ness')

Ты говоришь Magento

Посмотрите на модель ресурсов для awesome_ness, и в этой модели ресурсов скажите мне имя таблицы для сущности ness.

Итак, вы в основном выполняете один и тот же оператор create table, поэтому MySQL жалуется на уже существующую таблицу (потому что она существует).

Если вы добавите новую сущность в свой конфигурация

    <entities>
        <ness>
            <table>awesome_ness</table>
        </ness>
        <sauce>
            <table>awesome_sauces</table>
        </sauce>
    </entities>

Вы должны быть в состоянии сказать

$installer->getTable('awesome_ness/sauce')
 3
Author: Alan Storm, 2013-06-05 23:32:41