public function createOptimizerLimitationTable(SchemaSetupInterface $setup)
    {
        if (!$setup->getConnection()->isTableExists($setup->getTable(OptimizerInterface::TABLE_NAME_LIMITATION))) {
            $categoryIdField = $this->metadataPool->getMetadata(\Magento\Catalog\Api\Data\CategoryInterface::class)->getIdentifierField();

            $optimizerCategoryTable = $setup->getConnection()
                ->newTable($setup->getTable(OptimizerInterface::TABLE_NAME_LIMITATION))
                ->addColumn(
                    OptimizerInterface::OPTIMIZER_ID,
                    \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
                    null,
                    ['nullable' => false],
                    'Optimizer ID'
                )
                ->addColumn(
                    'category_id',
                    \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
                    null,
                    ['unsigned' => true, 'nullable' => true, 'default' => null],
                    'Category ID'
                )
                ->addColumn(
                    'query_id',
                    \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
                    null,
                    ['unsigned' => true, 'nullable' => true, 'default' => null],
                    'Query ID'
                )
                ->addForeignKey(
                    $setup->getFkName(
                        OptimizerInterface::TABLE_NAME_LIMITATION,
                        OptimizerInterface::OPTIMIZER_ID,
                        OptimizerInterface::TABLE_NAME,
                        OptimizerInterface::OPTIMIZER_ID
                    ),
                    OptimizerInterface::OPTIMIZER_ID,
                    $setup->getTable(OptimizerInterface::TABLE_NAME),
                    OptimizerInterface::OPTIMIZER_ID,
                    \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
                )
                ->addForeignKey(
                    $setup->getFkName(
                        OptimizerInterface::TABLE_NAME_LIMITATION,
                        'category_id',
                        'catalog_category_entity',
                        $categoryIdField
                    ),
                    'category_id',
                    $setup->getTable('catalog_category_entity'),
                    $categoryIdField,
                    \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
                )
                ->addForeignKey(
                    $setup->getFkName(OptimizerInterface::TABLE_NAME_LIMITATION, 'query_id', 'search_query', 'query_id'),
                    'query_id',
                    $setup->getTable('search_query'),
                    'query_id',
                    \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
                )
                ->addIndex(
                    $setup->getIdxName(
                        OptimizerInterface::TABLE_NAME_LIMITATION,
                        [OptimizerInterface::OPTIMIZER_ID, 'category_id', 'query_id'],
                        \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE
                    ),
                    [OptimizerInterface::OPTIMIZER_ID, 'category_id', 'query_id'],
                    ['type' => \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE]
                )
                ->setComment('Search optimizer limitation Table');

            $setup->getConnection()->createTable($optimizerCategoryTable);
        }
    }
public function createOptimizerLimitationTable(SchemaSetupInterface $setup)
    {
        if (!$setup->getConnection()->isTableExists($setup->getTable(OptimizerInterface::TABLE_NAME_LIMITATION))) {
            $categoryIdField = $this->metadataPool->getMetadata(\Magento\Catalog\Api\Data\CategoryInterface::class)->getIdentifierField();

            $optimizerCategoryTable = $setup->getConnection()
                ->newTable($setup->getTable(OptimizerInterface::TABLE_NAME_LIMITATION))
                ->addColumn(
                    OptimizerInterface::OPTIMIZER_ID,
                    \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
                    null,
                    ['nullable' => false],
                    'Optimizer ID'
                )
                ->addColumn(
                    'category_id',
                    \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
                    null,
                    ['unsigned' => true, 'nullable' => true, 'default' => null],
                    'Category ID'
                )
                ->addColumn(
                    'query_id',
                    \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
                    null,
                    ['unsigned' => true, 'nullable' => true, 'default' => null],
                    'Query ID'
                )
                ->addForeignKey(
                    $setup->getFkName(
                        OptimizerInterface::TABLE_NAME_LIMITATION,
                        OptimizerInterface::OPTIMIZER_ID,
                        OptimizerInterface::TABLE_NAME,
                        OptimizerInterface::OPTIMIZER_ID
                    ),
                    OptimizerInterface::OPTIMIZER_ID,
                    $setup->getTable(OptimizerInterface::TABLE_NAME),
                    OptimizerInterface::OPTIMIZER_ID,
                    \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
                )
                ->addForeignKey(
                    $setup->getFkName(
                        OptimizerInterface::TABLE_NAME_LIMITATION,
                        'category_id',
                        'catalog_category_entity',
                        $categoryIdField
                    ),
                    'category_id',
                    $setup->getTable('catalog_category_entity'),
                    $categoryIdField,
                    \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
                )
                ->addForeignKey(
                    $setup->getFkName(OptimizerInterface::TABLE_NAME_LIMITATION, 'query_id', 'search_query', 'query_id'),
                    'query_id',
                    $setup->getTable('search_query'),
                    'query_id',
                    \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
                )
                ->addIndex(
                    $setup->getIdxName(
                        OptimizerInterface::TABLE_NAME_LIMITATION,
                        [OptimizerInterface::OPTIMIZER_ID, 'category_id', 'query_id'],
                        \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE
                    ),
                    [OptimizerInterface::OPTIMIZER_ID, 'category_id', 'query_id'],
                    ['type' => \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE]
                )
                ->setComment('Search optimizer limitation Table');

            $setup->getConnection()->createTable($optimizerCategoryTable);
        }
    }
public function createOptimizerLimitationTable ( SchemaSetupInterface $ setup ) { if ( ! $ setup -> getConnection ( ) -> isTableExists ( $ setup -> getTable ( OptimizerInterface :: TABLE_NAME_LIMITATION ) ) ) { $ categoryIdField = $ this -> metadataPool -> getMetadata ( \ Magento \ Catalog \ Api \ Data \ CategoryInterface :: class ) -> getIdentifierField ( ) ; $ optimizerCategoryTable = $ setup -> getConnection ( ) -> newTable ( $ setup -> getTable ( OptimizerInterface :: TABLE_NAME_LIMITATION ) ) -> addColumn ( OptimizerInterface :: OPTIMIZER_ID , \ Magento \ Framework \ DB \ Ddl \ Table :: TYPE_SMALLINT , null , [ 'nullable' => false ] , 'Optimizer ID' ) -> addColumn ( 'category_id' , \ Magento \ Framework \ DB \ Ddl \ Table :: TYPE_INTEGER , null , [ 'unsigned' => true , 'nullable' => true , 'default' => null ] , 'Category ID' ) -> addColumn ( 'query_id' , \ Magento \ Framework \ DB \ Ddl \ Table :: TYPE_INTEGER , null , [ 'unsigned' => true , 'nullable' => true , 'default' => null ] , 'Query ID' ) -> addForeignKey ( $ setup -> getFkName ( OptimizerInterface :: TABLE_NAME_LIMITATION , OptimizerInterface :: OPTIMIZER_ID , OptimizerInterface :: TABLE_NAME , OptimizerInterface :: OPTIMIZER_ID ) , OptimizerInterface :: OPTIMIZER_ID , $ setup -> getTable ( OptimizerInterface :: TABLE_NAME ) , OptimizerInterface :: OPTIMIZER_ID , \ Magento \ Framework \ DB \ Ddl \ Table :: ACTION_CASCADE ) -> addForeignKey ( $ setup -> getFkName ( OptimizerInterface :: TABLE_NAME_LIMITATION , 'category_id' , 'catalog_category_entity' , $ categoryIdField ) , 'category_id' , $ setup -> getTable ( 'catalog_category_entity' ) , $ categoryIdField , \ Magento \ Framework \ DB \ Ddl \ Table :: ACTION_CASCADE ) -> addForeignKey ( $ setup -> getFkName ( OptimizerInterface :: TABLE_NAME_LIMITATION , 'query_id' , 'search_query' , 'query_id' ) , 'query_id' , $ setup -> getTable ( 'search_query' ) , 'query_id' , \ Magento \ Framework \ DB \ Ddl \ Table :: ACTION_CASCADE ) -> addIndex ( $ setup -> getIdxName ( OptimizerInterface :: TABLE_NAME_LIMITATION , [ OptimizerInterface :: OPTIMIZER_ID , 'category_id' , 'query_id' ] , \ Magento \ Framework \ DB \ Adapter \ AdapterInterface :: INDEX_TYPE_UNIQUE ) , [ OptimizerInterface :: OPTIMIZER_ID , 'category_id' , 'query_id' ] , [ 'type' => \ Magento \ Framework \ DB \ Adapter \ AdapterInterface :: INDEX_TYPE_UNIQUE ] ) -> setComment ( 'Search optimizer limitation Table' ) ; $ setup -> getConnection ( ) -> createTable ( $ optimizerCategoryTable ) ; } }
Create table containing entity association between optimizer and category_id or search_terms.

@param \Magento\Framework\Setup\SchemaSetupInterface $setup Setup instance
Create table containing entity association between optimizer and category_id or search_terms .