Hello,
We are trying to create custom tables when installing the module but it is not working. We have followed many guides but didn't get success. So can any one help us. We have created three files:
1. registration.php
2. etc/module.xml
3. Setup/InstallSchema.php
When we run upgrade, module is listed in config file but table is not created.
Thanks!
Solved! Go to Solution.
I have using all your code and try to create table and module...
1. Please add setup_version in module.xml file
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Test_Module" setup_version="0.0.1">
<sequence>
<module name="Magento_Catalog"/>
</sequence>
</module>
</config>
2. Please add these two line in your InstallSchema.php code..
$installer = $setup;
$installer->startSetup();
<?php
namespace Test\Module\Setup;
use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Setup\Exception;
class InstallSchema implements InstallSchemaInterface
{
public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
$installer = $setup;
$installer->startSetup();
try {
$table = $setup->getConnection()
->newTable($setup->getTable('test_custom_table'))
->addColumn(
'test_id',
\Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
null,
['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true],
'Test ID'
)
->addColumn(
'test_content',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
255,
['nullable' => false, 'default' => ''],
'Test Content'
)->setComment("Test Custom table");
$setup->getConnection()->createTable($table);
} catch(Exception $err) {
\Magento\Framework\App\ObjectManager::getInstance()->get('Psr\Log\LoggerInterface')->info($err->getMessage());
}
}
}
Once the extension is created, then we are creating installSchema.php file after executing the extension. Therefore, we have deleted the module form setup_module table and again run the command ....
php bin/magento setup:upgrade
php bin/magetno setup:static-content:deploy -f
php bin/magento cache:flush
Hi @supportopeadb2,
Maybe you want to check Declarative Schema: https://devdocs.magento.com/guides/v2.4/extension-dev-guide/declarative-schema/
Which version of Magento are you using?
Hello,
We are using magento 2.3 and 2.4.
Thanks!
@supportopeadb2 is it possible to share the code you are using in those files? Is your module lised into the setup_module table?
The installer won't run again if it was already executed.
Removing the record from setup_module with module = 'MyVendor _Helpdesk' should make it run again.
Hello,
Module entry is not present in setup_module table. Below are files we have created:
1. registration.php
<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'Test_CustomTable', __DIR__ );
2. etc/module.xml
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Test_CustomTable"> <sequence> <module name="Magento_Catalog"/> </sequence> </module> </config>
3. Setup/InstallSchema.php
<?php namespace Test\CustomTable\Setup; use Magento\Framework\Setup\InstallSchemaInterface; use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\SchemaSetupInterface; class InstallSchema implements InstallSchemaInterface { public function install(SchemaSetupInterface $setup, ModuleContextInterface $context) { $table = $setup->getConnection() ->newTable($setup->getTable('test_custom_table')) ->addColumn( 'test_id', \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER, null, ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true], 'Test ID' ) ->addColumn( 'test_content', \Magento\Framework\DB\Ddl\Table::TYPE_TEXT, 255, ['nullable' => false, 'default' => ''], 'Test Content' )->setComment("Test Custom table"); $setup->getConnection()->createTable($table); } }
Please check and let us know where is the issue.
Thanks!
Hello,
We have already followed your mentioned guide and many other but didn't get success. So please check our code and let us know where is the issue.
Thanks!
Please verify that you have followed a proper directory structure and also share the full path of every related file.
Change the code of etc/module.xml file.
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Test_CustomTable" setup_version="1.0.0"> <sequence> <module name="Magento_Catalog"/> </sequence> </module> </config>
Referring to your code shared in the comment I found want thing were missing.
You forgot to added the setup_version in your module.xml file
Change this from
<module name="Test_CustomTable">
To
<module name="Test_CustomTable" setup_version="1.0.0">