2

I have follow this documnet https://devdocs.magento.com/guides/v2.3/extension-dev-guide/declarative-schema/db-schema.html but not get success

module.xml

 <?xml version="1.0"?> <!-- /** * Copyright © Krish TechnoLabs, All rights reserved. */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Ktpl_Test1" setup_version="1.0.0"> <sequence> <module name="Magento_Eav"/> </sequence> </module> </config> 

db_schema.xml

 <?xml version="1.0"?> <!-- /* * Copyright © 2019 Krish Technolabs. All rights reserved. * See COPYING.txt for license details */ --> <schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd"> <table comment="Test Table 1" engine="innodb" name="ktpl_test1" resource="default"> <column identity="true" name="test1_id" nullable="false" padding="10" unsigned="true" xsi:type="int"/> <column name="test_name" nullable="false" padding="10" unsigned="true" xsi:type="int"/> <column name="test2_id" nullable="false" padding="10" unsigned="true" xsi:type="int"/> <constraint referenceId="PRIMARY" xsi:type="primary"> <column name="test1_id"/> </constraint> <constraint xsi:type="foreign" referenceId="Test12ID" table="ktpl_test1" column="test2_id" referenceTable ="ktpl_test2" referenceColumn="test2_id"/> <constraint xsi:type="foreign" referenceId="Test13ID" table="ktpl_test1" column="test3_id" referenceTable ="ktpl_test3" referenceColumn="test3_id"/> </table> <table name="eav_attribute" resource="default" engine="innodb" comment="Eav Attribute"> <column xsi:type="mediumtext" name="note" nullable="false" length="500" comment="Note"/> <constraint xsi:type="primary" referenceId="PRIMARY"> <column name="attribute_id"/> </constraint> </table> </schema> 

3 Answers 3

2

The only mistake you are doing here is length attribute, just remove it.

This is the working code..

etc\db_schema.xml

<?xml version="1.0"?> <schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd"> <table name="eav_attribute" resource="default" engine="innodb" comment="Eav Attribute"> <column xsi:type="mediumtext" name="note" nullable="true" comment="Note"/> </table> </schema> 
1
  • getting Invalid Document Element 'column', attribute 'length': The attribute 'length' is not allowed. Line: 297 error Commented Jul 24, 2019 at 5:57
0

Create db_schema.xml file in your module and add this below code :

app/code/VendorName/ModuleName/etc/db_schema.xml

<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd"> <table name="eav_attribute"> <column xsi:type="mediumtext" name="note" nullable="true" length="255" comment="Note"/> <constraint xsi:type="primary" referenceId="PRIMARY"> <column name="attribute_id"/> </constraint> </table> </schema> 

Now, execute this below command in your Magento root directory

php bin/magento setup:db-declaration:generate-whitelist --module-name=VendorName_ModuleName 

Make sure, there are db_whitelist_schema.json file will be create in app/code/VendorName/ModuleName/etc folder.

Now, upgrade, deploy and clean cache

php bin/magento s:up php bin/magento s:s:d -f php bin/magento c:c 

enter image description here

Hope, it will helpful for you.


UPDATE :

de_whitelist_schema.json (After install ktpl_test1 table) :

{ "ktpl_test1": { "column": { "test1_id": true, "test_name": true, "test2_id": true }, "constraint": { "PRIMARY": true } }, "eav_attribute": { "column": { "note": true }, "constraint": { "PRIMARY": true } } } 
10
  • getting error when updating doing s:up The XML in file "/var/www/html/Magento231new/app/code/Ktpl/Test1/etc/db_schema.xml" is invalid: Element 'column', attribute 'length': The attribute 'length' is not allowed. Line: 20 Commented Jul 24, 2019 at 5:35
  • Did you generate whitelist file? Commented Jul 24, 2019 at 5:37
  • yes , i have followed above command Commented Jul 24, 2019 at 5:38
  • It seems like there are syntax error of tags. Not sure. Can you please upload your db_schema.xml code? Commented Jul 24, 2019 at 5:41
  • already added, i have run above command but db_whitelist_schema.json not generated Commented Jul 24, 2019 at 5:43
0

As far as I know, it's not possible in magento 2 right now. There is also an issue related to chaning the column type: Table quote column customer_note uses wrong type

This is my fix for that issue:

use Magento\Framework\Setup\Declaration\Schema\Declaration\ReaderComposite; class ReaderCompositePlugin { public function afterRead(ReaderComposite $subject, $result) { if (isset($result['table']['quote']) && isset($result['table']['quote']['column']['customer_note'])) { $result['table']['quote']['column']['customer_note']['type'] = 'text'; unset($result['table']['quote']['column']['customer_note']['length']); } return $result; } } 

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.