无法在magento 2中创建表

无法在magento 2中创建表,magento,magento2,Magento,Magento2,我试图使用安装模式创建一个表,但它抛出了下面给出的错误 正在安装架构。。。SQLSTATE[HY000]:一般错误:1005无法创建表magento.questionanswer错误号:150外键约束格式不正确,查询为:create 表(如果不存在)问题答案 问题id int空注释“问题id”, 答案id int空注释“答案id”, 主键问题id、答案id、, 索引问题答案答案ID答案ID, 约束问题答案\u问题\u ID\u常见问题\u问题\u ID外键问题\u ID引用删除级联上的常见问题问

我试图使用安装模式创建一个表,但它抛出了下面给出的错误 正在安装架构。。。SQLSTATE[HY000]:一般错误:1005无法创建表magento.questionanswer错误号:150外键约束格式不正确,查询为:create 表(如果不存在)问题答案 问题id int空注释“问题id”, 答案id int空注释“答案id”, 主键问题id、答案id、, 索引问题答案答案ID答案ID, 约束问题答案\u问题\u ID\u常见问题\u问题\u ID外键问题\u ID引用删除级联上的常见问题问题问题\u ID, 约束问题答案\u答案\u ID\u FAQ答案\u答案\u ID外键答案\u ID引用删除级联上的FAQ答案答案\u ID 注释='Question to answer Linkage Table'ENGINE=INNODB charset=utf8 COLLATE=utf8\u general\u 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);

因为列类型不匹配。在我看来 问题id和答案id在参考表中具有类型\u SMALLINT,但在问题答案中,您创建了类型\u INTEGER而不是该类型。所以要解决这个问题,只需将类型_INTEGER更改为类型_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'
        );
这会解决你的问题

问候