module-toolkit/table-manager

1.0.0 2025-07-31 18:07 UTC

This package is auto-updated.

Last update: 2025-07-31 18:09:36 UTC


README

etc/di.xml

<virtualType name="Vendor\Module\Model\GetConnectionName"
                 type="ModuleToolkit\TableManager\TableManager\GetConnectionName">
        <arguments>
            <argument name="connectionName" xsi:type="string">default</argument> 
            <!-- use  connectionName or set config path below  -->
            <argument name="connectionNameConfigPath" xsi:type="const">ModuleToolkit\ApiAppImportAcesData\Api\ConstraintsInterface::XML_PATH_DB_CONNECTION</argument>
        </arguments>
    </virtualType>

    <!-- Create table manager -->
    <virtualType name="Vendor\Module\Model\CustomTableManager"
                 type="ModuleToolkit\TableManager\TableManager\TableManager">
        <arguments>
            <argument name="getTableName" xsi:type="object">Vendor\Module\Model\GetCustomTableName</argument>
            <argument name="tableCreator" xsi:type="object">Vendor\Module\Model\CustomTableCreator</argument>
            <argument name="getConnectionName" xsi:type="object">Vendor\Module\Model\GetConnectionName</argument>
        </arguments>
    </virtualType>

    <!-- Get table name class -->
    <virtualType name="Vendor\Module\Model\GetCustomTableName"
                 type="ModuleToolkit\TableManager\TableManager\GetTableName">
        <arguments>
            <argument name="baseTableName" xsi:type="const">\Vendor\Module\Api\ConstraintsInterface::PARTS_MAKE_YEAR_TABLE</argument>
            <argument name="dimensions" xsi:type="array">
                <item name="test" xsi:type="object">Vendor\Module\Model\TestDimension</item>
            </argument>
        </arguments>
    </virtualType>

    <!-- DIMENSION -->
    <virtualType name="Vendor\Module\Model\TestDimension"
                 type="ModuleToolkit\TableManager\TableManager\TableDimension">
        <arguments>
            <argument name="key" xsi:type="string">test</argument>
            <argument name="sortOrder" xsi:type="number">10</argument>
        </arguments>
    </virtualType>

    <!-- table creator class + structure to create table on the fly (by dimensions)-->
    <virtualType name="Vendor\Module\Model\CustomTableCreator"
                 type="ModuleToolkit\TableManager\TableManager\TableCreator">
        <arguments>
            <argument name="installColumns" xsi:type="array">
                <item name="entity_id" xsi:type="array">
                    <item name="key" xsi:type="string">entity_id</item>
                    <item name="type" xsi:type="const">\Magento\Framework\DB\Ddl\Table::TYPE_INTEGER</item>
                    <item name="options" xsi:type="array">
                        <item name="identity" xsi:type="boolean">true</item>
                        <item name="unsigned" xsi:type="boolean">true</item>
                        <item name="nullable" xsi:type="boolean">false</item>
                        <item name="primary" xsi:type="boolean">true</item>
                    </item>
                    <item name="comment" xsi:type="string">Entity Id</item>
                </item>
                <item name="make" xsi:type="array">
                    <item name="key" xsi:type="const">Vendor\Module\Api\ConstraintsInterface::MAKE</item>
                    <item name="type" xsi:type="const">\Magento\Framework\DB\Ddl\Table::TYPE_TEXT</item>
                    <item name="size" xsi:type="number">50</item>
                    <item name="options" xsi:type="array">
                        <item name="nullable" xsi:type="boolean">false</item>
                    </item>
                    <item name="comment" xsi:type="string">Make</item>
                </item>
                <item name="year" xsi:type="array">
                    <item name="key" xsi:type="const">Vendor\Module\Api\ConstraintsInterface::YEAR</item>
                    <item name="type" xsi:type="const">\Magento\Framework\DB\Ddl\Table::TYPE_TEXT</item>
                    <item name="size" xsi:type="number">50</item>
                    <item name="options" xsi:type="array">
                        <item name="nullable" xsi:type="boolean">false</item>
                    </item>
                    <item name="comment" xsi:type="string">Year</item>
                </item>
            </argument>
            <argument name="installIndexes" xsi:type="array">
                <item name="index_data" xsi:type="array">
                    <item name="fields" xsi:type="array">
                        <item name="make" xsi:type="const">Vendor\Module\Api\ConstraintsInterface::MAKE</item>
                        <item name="year" xsi:type="const">Vendor\Module\Api\ConstraintsInterface::YEAR</item>
                    </item>
                    <item name="indexType" xsi:type="const">\Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE</item>
                </item>
            </argument>
            <argument name="foreignKeys" xsi:type="array">
                <item name="customer_id" xsi:type="array">
                    <item name="priTableName" xsi:type="object">Vendor\Module\Model\GetCustomTableName</item>
                    <item name="priColumnName" xsi:type="const">Vendor\Module\Api\WheelCustomerConstraintsInterface::CUSTOMER_ID</item>
                    <item name="refTableName" xsi:type="string">customer_entity</item>
                    <item name="refColumnName" xsi:type="string">entity_id</item>
                    <item name="onDelete" xsi:type="const">\Magento\Framework\DB\Ddl\Table::ACTION_CASCADE</item>
                </item>
            </argument>
            <argument name="tableComment" xsi:type="string">Make-Year Parts Map</argument>
        </arguments>
    </virtualType>


    <type name="Namespace\Custom\CustomModel">
        <arguments>
            <argument name="tableManager" xsi:type="object">Vendor\Module\Model\CustomTableManager</argument>
        </arguments>
    </type>
  1. Adminhtml Grid, Pager
  • etc/adminhtml/di.xml
    <type name="Vendor\Module\Block\Adminhtml\Container">
        <arguments>
            <argument name="tableManager" xsi:type="object">Vendor\Module\Model\CustomTableManager</argument>
            <argument name="pagerConfig" xsi:type="object">Vendor\Module\Model\CustomPagerConfig</argument>
        </arguments>
    </type>

    <virtualType name="Vendor\Module\Model\CustomPagerConfig"
                 type="ModuleToolkit\AdminhtmlHelper\Model\PagerConfig">
        <arguments>
            <argument name="request" xsi:type="object">ModuleToolkit\AdminhtmlHelper\Model\HttpRequest</argument>
            <argument name="gridCollection" xsi:type="object">Vendor\Module\Model\CustomGridCollection</argument>
            <argument name="filters" xsi:type="array">
                <item name="make" xsi:type="const">Vendor\Module\Api\ConstraintsInterface::MAKE</item>
                <item name="year" xsi:type="const">Vendor\Module\Api\ConstraintsInterface::YEAR</item>
                <item name="entity_id" xsi:type="const">Vendor\Module\Api\ConstraintsInterface::ENTITY_ID</item>
            </argument>
        </arguments>
    </virtualType>
    <type name="Vendor\Module\Block\Adminhtml\CustomGrid">
        <arguments>
            <argument name="pagerConfig" xsi:type="object">Vendor\Module\Model\CustomPagerConfig</argument>
            <argument name="openFormUrl" xsi:type="string">custom/vendor/openform</argument>
            <argument name="deleteFormUrl" xsi:type="string">custom/vendor/delete</argument>
        </arguments>
    </type>
    <virtualType
        name="Vendor\Module\Block\Adminhtml\CustomForm"
        type="ModuleToolkit\AdminhtmlHelper\Block\Adminhtml\Form">
        <arguments>
            <argument name="pagerConfig" xsi:type="object">Vendor\Module\Model\CustomPagerConfig</argument>
            <argument name="formSaveUrl" xsi:type="string">custom/vendor/saveform</argument>
            <argument name="columns" xsi:type="object">ModuleToolkit\AdminhtmlHelper\Block\Adminhtml\Form\Columns</argument>
            <argument name="identityColumn" xsi:type="string">entity_id</argument>
        </arguments>
    </virtualType>
    <type name="Vendor\Module\Block\Adminhtml\CustomPager">
        <arguments>
            <argument name="pagerConfig" xsi:type="object">Vendor\Module\Model\CustomPagerConfig</argument>
        </arguments>
    </type>

    <type name="Vendor\Module\Controller\Adminhtml\Custom\OpenForm">
        <arguments>
            <argument name="form" xsi:type="object">Vendor\Module\Block\Adminhtml\CustomForm</argument>
        </arguments>
    </type>
  • Layout
<?xml version="1.0" encoding="UTF-8"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
            <block name="custom.list"
                   class="Vendor\Module\Block\Adminhtml\Custom"
                   template="Vendor_Module::custom.phtml"
            >
                <block name="custom.grid" class="Vendor\Module\Block\Adminhtml\CustomGrid"/>
                <block name="custom.pager" class="Vendor\Module\Block\Adminhtml\CustomPager"/>
            </block>
        </referenceContainer>
    </body>
</page>
  • Template
        <?= $block->getChildHtml('custom.grid'); ?>
        <?= $block->getChildHtml('custom.pager'); ?>
  1. Import Function
    <type name="ModuleToolkit\AdminhtmlHelper\Model\ImportProcessor">
        <arguments>
            <argument name="importConfigs" xsi:type="array">
                <item name="wheel_fitment_import_config" xsi:type="object">Vendor\Module\Import\CustomImportConfig</item>
            </argument>
        </arguments>
    </type>
    <virtualType name="Vendor\Module\Import\CustomImportConfig"
                 type="ModuleToolkit\AdminhtmlHelper\Model\ImportConfig">
        <arguments>
            <argument name="saveHandler" xsi:type="object">Vendor\Module\Import\CustomSaverHandler</argument>
            <argument name="identity" xsi:type="string">custom_config</argument>
            <argument name="importExampleFile" xsi:type="string">Vendor_Module::data/import-example/custom-example.csv</argument>
        </arguments>
    </virtualType>

    <virtualType name="Vendor\Module\Block\Adminhtml\CustomImport"
                 type="ModuleToolkit\AdminhtmlHelper\Block\Adminhtml\Import"
    >
        <arguments>
            <argument name="importConfigIdentity" xsi:type="string">custom_config</argument>
        </arguments>
    </virtualType>
  • Layout
<?xml version="1.0" encoding="UTF-8"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
            <block name="custom.list"
                   class="Vendor\Module\Block\Adminhtml\Custom"
                   template="Vendor_Module::custom.phtml"
            >
                <block name="custom.grid" class="Vendor\Module\Block\Adminhtml\CustomGrid"/>
                <block name="custom.pager" class="Vendor\Module\Block\Adminhtml\CustomPager"/>
            </block>
        </referenceContainer>
    </body>
</page>
  • Template
```phtml
    <?= $block->getChildHtml('custom.import'); ?>

Usage

namespace Vendor\Module;

use ModuleToolkit\TableManager\TableManager\TableManagerInterface;

class CustomModel
{
    public function __construct(
        protected TableManagerInterface $tableManager
    ){}
    
    public function getItems() {
        $tableRequest = $this->tableManager->getTableRequest();
        $tableRequest->setValue('test', 'value');
        $tableRequest->setValue('column_key', 'value');
        $tableRequest->setValue('column_key2', 'value2');
        
        $tableRequest->setSortOrder('column_key2', 'DESC');
        $tableRequest->setSortOrder('column_key1', 'ASC');
        
        $tableRequest->setGroup('column_key3');
        
        $result = $this->tableManager->getItems($tableRequest);
    }
    
    public function createItem() {
        $tableRequest = $this->tableManager->getTableRequest();
        $tableRequest->setValue('test', 'value');
        
        $wheelFitmentManager->createItem($tableRequest, $this->getFakeWheelItem());
    }
    
     public function updateItem() {
        $tableRequest = $this->tableManager->getTableRequest();
        $tableRequest->setValue('test', 'value');
        $entityId = 4;
        
        $wheelFitmentManager->createItem($tableRequest, $this->getFakeWheelItem(), $entityId, 'entity_id');
    }
    
}

Helpful method for define primary keys for list by unique keys

php \ModuleToolkit\TableManager\TableManager\TableManager::findMatchingRecords(TableRequest $request, array $columns)

Table Creator via console command

  • di.xml
    <virtualType name="ModuleToolkit\Custom\Model\CustomTableManager"
                 type="ModuleToolkit\TableManager\TableManager\TableManager">
        <arguments>
            <argument name="getTableName" xsi:type="object">....</argument>
            <argument name="tableCreator" xsi:type="object">...</argument>
            <argument name="getConnectionName" xsi:type="object">...</argument>
        </arguments>
    </virtualType>

    <type name="ModuleToolkit\TableManager\TableManager\TableCreatorRunner">
        <arguments>
            <argument name="createWraps" xsi:type="array">
                <item name="custom_creator_type" xsi:type="object">ModuleToolkit\Custom\CustomCreateType</item>
                <item name="custom_recreator_type" xsi:type="object">ModuleToolkit\Custom\CustomReCreateType</item>
            </argument>
        </arguments>
    </type>

    <virtualType name="ModuleToolkit\Custom\CustomCreateType" type="ModuleToolkit\TableManager\TableManager\TableCreatorRunner\TableCreateType">
        <arguments>
            <argument name="type" xsi:type="const">ModuleToolkit\TableManager\TableManager\TableCreatorRunner\TableCreateTypeInterface::CREATE</argument>
            <argument name="tableManager" xsi:type="object">ModuleToolkit\Custom\Model\CustomTableManager</argument>
        </arguments>
    </virtualType>
    
    <virtualType name="ModuleToolkit\Custom\CustomReCreateType" type="ModuleToolkit\TableManager\TableManager\TableCreatorRunner\TableCreateType">
        <arguments>
            <argument name="type" xsi:type="const">ModuleToolkit\TableManager\TableManager\TableCreatorRunner\TableCreateTypeInterface::RECREATE</argument>
            <argument name="tableManager" xsi:type="object">ModuleToolkit\Custom\Model\CustomTableManager</argument>
        </arguments>
    </virtualType>