невозможно создать таблицу в magento 2 - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь создать таблицу, используя схему установки, но она выдает ошибку, указанную ниже. Установка схемы ... SQLSTATE [HY000]: Общая ошибка: 1005 Невозможно создать таблицу magento. questionanswer (errno:150 «Неправильно сформировано ограничение внешнего ключа»), запрос был: СОЗДАЙТЕ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ questionanswer (question_id int NULL КОММЕНТАРИЙ «ID вопроса», answer_id int NULL КОММЕНТАРИЙ «ИД ответа», ПЕРВИЧНЫЙ КЛЮЧ (question_id, answer_id), ИНДЕКС QUESTIONANSWER_ANSWER_ID (answer_id), ОГРАНИЧЕНИЕ QUESTIONANSWER_QUESTION_ID_FAQQUESTION_QUESTION_ID ИНОСТРАННЫЙ КЛЮЧ (question_id) ССЫЛКИ faqquestion (question_id) НА УДАЛЕННЫЙ КАСКАД, ОГРАНИЧЕНИЕ QUESTIONANSWER_ANSWER_ID_FAQANSWER_ANSWER_ID ИНОСТРАННЫЙ КЛЮЧ (answer_id) ССЫЛКИ faqanswer (answer_id) НА УДАЛИТЬ КАСКАД) КОММЕНТАРИЙ = 'Вопрос к ответу Таблица связей' ENGINE = INNODB charset = utf8 COLLATE = utf8_general_ci.

Мой код из installschema для таблиц:

        //      Creating Question table
    $table = $installer->getConnection()->newTable(
        $installer->getTable('faqquestion')
    )->addColumn(
        'question_id',
        \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
        null,
        ['nullable' => false, 'primary' => true],
        'Question ID'
    )->addColumn(
        'question',
        \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
        '2M',
        ['nullable' => true,'default' => null],
        'Question'
    )->addColumn(
        'question_identifier',
        \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
        255,
        ['nullable' => true],
        'Identifier'
    )->addColumn(
        'question_topic',
        \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
        255,
        ['nullable' => true],
        'Topic'
    )->addColumn(
        'question_sortorder',
        \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
        1,
        ['nullable' => false,'default' => 0],
        'SortOrder'
    )->addColumn(
        'question_status',
        \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
        1,
        ['nullable' => false,'default' => 0],
        'Question Status'
    )->addColumn(
        'question_visibility',
        \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
        1,
        ['nullable' => false,'default' => 0],
        'Question Visibility'
    )->addColumn(
        'question_tags',
        \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
        255,
        ['nullable' => true],
        'Tags'
    )->setComment(
        'Question Table'
    );
    $installer->getConnection()->createTable($table);



    //creating answer table
    $table = $installer->getConnection()->newTable(
        $installer->getTable('faqanswer')
    )->addColumn(
        'answer_id',
        \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
        null,
        ['nullable' => false, 'primary' => true],
        'Answer ID'
    )->addColumn(
        'answer',
        \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
        '2M',
        ['nullable' => true,'default' => null],
        'Answer'
    )->addColumn(
        'answer_likes',
        \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
        1,
        ['nullable' => false,'default' => 0],
        'Likes'
    )->addColumn(
        'answer_dislikes',
        \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
        1,
        ['nullable' => false,'default' => 0],
        'Dislikes'
    )->addColumn(
        'answer_author',
        \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
        255,
        ['nullable' => true],
        'Author'
    )->addColumn(
        'answer_status',
        \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
        1,
        ['nullable' => false,'default' => 0],
        'Answer Status'
    )->setComment(
        'Answer table'
    );
    $installer->getConnection()->createTable($table);

//        queston and related answer table
    $table = $installer->getConnection()->newTable(
        $installer->getTable('questionanswer')
    )->addColumn(
        'question_id',
        \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
        null,
        ['nullable' => true, 'primary' => true],
        'Question ID'
    )->addColumn(
        'answer_id',
        \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
        null,
        ['nullable' => true, 'primary' => true],
        'Answer ID'
    )->addIndex(
        $installer->getIdxName('questionanswer', ['answer_id']),
        ['answer_id']
    )->addForeignKey(
        $installer->getFkName('questionanswer', 'question_id', 'faqquestion', 'question_id'),
        'question_id',
        $installer->getTable('faqquestion'),
        'question_id',
        \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
    )->addForeignKey(
        $installer->getFkName('questionanswer', 'answer_id', 'faqanswer', 'answer_id'),
        'answer_id',
        $installer->getTable('faqanswer'),
        'answer_id',
        \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
    )->setComment(
        ' Question to aNswer Linkage Table'
    );
    $installer->getConnection()->createTable($table);

1 Ответ

0 голосов
/ 18 декабря 2018

Поскольку типы столбцов не совпадают.Как я вижу, question_id и answer_id имеют TYPE_SMALLINT в справочных таблицах, но в ответах на вопрос вы создали TYPE_INTEGER вместо этого.Поэтому, чтобы решить эту проблему, просто нужно изменить TYPE_INTEGER на TYPE_SMALLINT , вопросник будет выглядеть так:

$table = $installer->getConnection()->newTable(
            $installer->getTable('questionanswer')
        )->addColumn(
            'question_id',
            \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
            null,
            ['nullable' => false, 'primary' => true],
            'Question ID'
        )->addColumn(
            'answer_id',
            \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
            null,
            ['nullable' => false, 'primary' => true],
            'Answer ID'
        )->addIndex(
            $installer->getIdxName('questionanswer', ['answer_id']),
            ['answer_id']
        )->addForeignKey(
            $installer->getFkName('questionanswer', 'question_id', 'faqquestion', 'question_id'),
            'question_id',
            $installer->getTable('faqquestion'),
            'question_id',
            \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
        )->addForeignKey(
            $installer->getFkName('questionanswer', 'answer_id', 'faqanswer', 'answer_id'),
            'answer_id',
            $installer->getTable('faqanswer'),
            'answer_id',
            \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
        )->setComment(
            ' Question to aNswer Linkage Table'
        );

Это решит вашу проблему

Привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...