Определите Несколько Имен Таблиц В Файле Конфигурации 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>
. Заранее спасибо.
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')
Я давно этого не делал, и я не проверял свою работу, НО
Когда вы говорите
$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')