Magento 2.3 : How to implement declarative schema in custom module











up vote
4
down vote

favorite
1












I install the magento 2.3 and I'm creating custom module.



But, I don't know how to create custom database in magento 2.3 version.



Anyone please help me.



Thanks in advance.










share|improve this question




















  • 1




    database Or custom table in Magento database?
    – Pawan
    Nov 30 at 3:30















up vote
4
down vote

favorite
1












I install the magento 2.3 and I'm creating custom module.



But, I don't know how to create custom database in magento 2.3 version.



Anyone please help me.



Thanks in advance.










share|improve this question




















  • 1




    database Or custom table in Magento database?
    – Pawan
    Nov 30 at 3:30













up vote
4
down vote

favorite
1









up vote
4
down vote

favorite
1






1





I install the magento 2.3 and I'm creating custom module.



But, I don't know how to create custom database in magento 2.3 version.



Anyone please help me.



Thanks in advance.










share|improve this question















I install the magento 2.3 and I'm creating custom module.



But, I don't know how to create custom database in magento 2.3 version.



Anyone please help me.



Thanks in advance.







magento2.3 database-schema






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 30 at 3:29









Rohan Hapani

5,38321561




5,38321561










asked Nov 30 at 3:19









harsh khandhar

233




233








  • 1




    database Or custom table in Magento database?
    – Pawan
    Nov 30 at 3:30














  • 1




    database Or custom table in Magento database?
    – Pawan
    Nov 30 at 3:30








1




1




database Or custom table in Magento database?
– Pawan
Nov 30 at 3:30




database Or custom table in Magento database?
– Pawan
Nov 30 at 3:30










2 Answers
2






active

oldest

votes

















up vote
5
down vote



accepted










First of all, create db_schema.xml file inside /RH/Helloworld/etc and write the following code :



<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. 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 name="rh_helloworld" resource="default" engine="innodb" comment="RH Helloworld">
<column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="ID"/>
<column xsi:type="varchar" name="author_name" nullable="false" length="25" comment="Name"/>
<column xsi:type="varchar" name="email" nullable="false" length="25" comment="Email"/>
<column xsi:type="varchar" name="description" nullable="false" length="255" comment="Descrition"/>
<constraint xsi:type="primary" name="PRIMARY">
<column name="id"/>
</constraint>
</table>
</schema>




  • <table> .. </table> = "Use for create and set table name"


  • <column> .. </column> = "Use for create and set column of the table"


  • <constraint> .. </constraint> = "Use for set constraint as like
    primary key, foreign key, unique key etc."


Before running the upgrade command you need to add your schema to db_whitelist_schema.json file by running the following command :



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


Now, there are db_whitelist_schema.json file will be create in /RH/Helloworld/etc folder.



Now, run php bin/magento s:up



Table will be create inside database.



=> If you want to renaming a column, you need to set below line in your db_schema.xml at appropriate column :



<column xsi:type="varchar" name="customer_email" onCreate="migrateDataFrom(email)" on_update="false" nullable="false" default="" comment="Customer Email"/>


here, name = "new column name" and onCreate="migrateDataFrom()" = "old column name"



=> If you want to drop table, then you can either remove entire table node from xml file or you can set disabled attribute to true as like below line in your db_schema.xml :



<table name="rh_helloworld" resource="default" engine="innodb" comment="RH Helloworld" disabled="true">
..
</table>


Hope, It will helpful for you.






share|improve this answer

















  • 1




    Good one @Rohan
    – Ramkishan Suthar
    Nov 30 at 4:36










  • Nice explanation..... Thank you so much.... It is really helpful....
    – harsh khandhar
    Nov 30 at 10:29










  • Happy to help !! Happy coding :) & Thank You @RamkishanSuthar
    – Rohan Hapani
    Nov 30 at 10:31


















up vote
1
down vote













Create file named as db_schema.xml under etc folder in your any custom module.



<?xml version="1.0" encoding="UTF-8"?>

<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
<table name="books_data" resource="default" engine="innodb" comment="Book Table">
<column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="BOOK ID"/>
<column xsi:type="varchar" name="book_name" nullable="false" length="255" comment="Book Name"/>
<column xsi:type="int" name="author" unsigned="true" nullable="true" identity="false" default="" comment="Author"/>
<column xsi:type="varchar" name="isbn_no" nullable="true" comment="ISBN No"/>
<column xsi:type="timestamp" name="publish_date" on_update="false" nullable="false" default="CURRENT_TIMESTAMP"
comment="Publish Date"/>
<column xsi:type="varchar" name="language" nullable="true" comment="Language"/>
<column xsi:type="decimal" name="mrp" scale="4" precision="12" unsigned="false" nullable="false"
default="0" comment="MRP"/>
<constraint xsi:type="primary" name="PRIMARY">
<column name="id"/>
</constraint>
</table>

<table name="author_data" resource="default" engine="innodb" comment="Author Table">
<column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="Author ID"/>
<column xsi:type="varchar" name="author_name" nullable="false" length="255" comment="Author Name"/>
<column xsi:type="varchar" name="author_email" nullable="false" length="255" comment="Author Email"/>
<column xsi:type="varchar" name="affliation" nullable="false" length="255" comment="Affliation"/>
<column xsi:type="int" name="age" unsigned="true" nullable="true" identity="false" default="" comment="Age"/>
<constraint xsi:type="primary" name="PRIMARY">
<column name="id"/>
</constraint>
</table>
</schema>


Now create db_whitelist_schema.json at same path



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


After that just run php bin/magento setup:upgrade. For more information you can check Here . Let me know in case you need more explanation on this.






share|improve this answer





















    Your Answer








    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "479"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f251884%2fmagento-2-3-how-to-implement-declarative-schema-in-custom-module%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    5
    down vote



    accepted










    First of all, create db_schema.xml file inside /RH/Helloworld/etc and write the following code :



    <?xml version="1.0"?>
    <!--
    /**
    * Copyright © Magento, Inc. 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 name="rh_helloworld" resource="default" engine="innodb" comment="RH Helloworld">
    <column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="ID"/>
    <column xsi:type="varchar" name="author_name" nullable="false" length="25" comment="Name"/>
    <column xsi:type="varchar" name="email" nullable="false" length="25" comment="Email"/>
    <column xsi:type="varchar" name="description" nullable="false" length="255" comment="Descrition"/>
    <constraint xsi:type="primary" name="PRIMARY">
    <column name="id"/>
    </constraint>
    </table>
    </schema>




    • <table> .. </table> = "Use for create and set table name"


    • <column> .. </column> = "Use for create and set column of the table"


    • <constraint> .. </constraint> = "Use for set constraint as like
      primary key, foreign key, unique key etc."


    Before running the upgrade command you need to add your schema to db_whitelist_schema.json file by running the following command :



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


    Now, there are db_whitelist_schema.json file will be create in /RH/Helloworld/etc folder.



    Now, run php bin/magento s:up



    Table will be create inside database.



    => If you want to renaming a column, you need to set below line in your db_schema.xml at appropriate column :



    <column xsi:type="varchar" name="customer_email" onCreate="migrateDataFrom(email)" on_update="false" nullable="false" default="" comment="Customer Email"/>


    here, name = "new column name" and onCreate="migrateDataFrom()" = "old column name"



    => If you want to drop table, then you can either remove entire table node from xml file or you can set disabled attribute to true as like below line in your db_schema.xml :



    <table name="rh_helloworld" resource="default" engine="innodb" comment="RH Helloworld" disabled="true">
    ..
    </table>


    Hope, It will helpful for you.






    share|improve this answer

















    • 1




      Good one @Rohan
      – Ramkishan Suthar
      Nov 30 at 4:36










    • Nice explanation..... Thank you so much.... It is really helpful....
      – harsh khandhar
      Nov 30 at 10:29










    • Happy to help !! Happy coding :) & Thank You @RamkishanSuthar
      – Rohan Hapani
      Nov 30 at 10:31















    up vote
    5
    down vote



    accepted










    First of all, create db_schema.xml file inside /RH/Helloworld/etc and write the following code :



    <?xml version="1.0"?>
    <!--
    /**
    * Copyright © Magento, Inc. 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 name="rh_helloworld" resource="default" engine="innodb" comment="RH Helloworld">
    <column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="ID"/>
    <column xsi:type="varchar" name="author_name" nullable="false" length="25" comment="Name"/>
    <column xsi:type="varchar" name="email" nullable="false" length="25" comment="Email"/>
    <column xsi:type="varchar" name="description" nullable="false" length="255" comment="Descrition"/>
    <constraint xsi:type="primary" name="PRIMARY">
    <column name="id"/>
    </constraint>
    </table>
    </schema>




    • <table> .. </table> = "Use for create and set table name"


    • <column> .. </column> = "Use for create and set column of the table"


    • <constraint> .. </constraint> = "Use for set constraint as like
      primary key, foreign key, unique key etc."


    Before running the upgrade command you need to add your schema to db_whitelist_schema.json file by running the following command :



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


    Now, there are db_whitelist_schema.json file will be create in /RH/Helloworld/etc folder.



    Now, run php bin/magento s:up



    Table will be create inside database.



    => If you want to renaming a column, you need to set below line in your db_schema.xml at appropriate column :



    <column xsi:type="varchar" name="customer_email" onCreate="migrateDataFrom(email)" on_update="false" nullable="false" default="" comment="Customer Email"/>


    here, name = "new column name" and onCreate="migrateDataFrom()" = "old column name"



    => If you want to drop table, then you can either remove entire table node from xml file or you can set disabled attribute to true as like below line in your db_schema.xml :



    <table name="rh_helloworld" resource="default" engine="innodb" comment="RH Helloworld" disabled="true">
    ..
    </table>


    Hope, It will helpful for you.






    share|improve this answer

















    • 1




      Good one @Rohan
      – Ramkishan Suthar
      Nov 30 at 4:36










    • Nice explanation..... Thank you so much.... It is really helpful....
      – harsh khandhar
      Nov 30 at 10:29










    • Happy to help !! Happy coding :) & Thank You @RamkishanSuthar
      – Rohan Hapani
      Nov 30 at 10:31













    up vote
    5
    down vote



    accepted







    up vote
    5
    down vote



    accepted






    First of all, create db_schema.xml file inside /RH/Helloworld/etc and write the following code :



    <?xml version="1.0"?>
    <!--
    /**
    * Copyright © Magento, Inc. 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 name="rh_helloworld" resource="default" engine="innodb" comment="RH Helloworld">
    <column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="ID"/>
    <column xsi:type="varchar" name="author_name" nullable="false" length="25" comment="Name"/>
    <column xsi:type="varchar" name="email" nullable="false" length="25" comment="Email"/>
    <column xsi:type="varchar" name="description" nullable="false" length="255" comment="Descrition"/>
    <constraint xsi:type="primary" name="PRIMARY">
    <column name="id"/>
    </constraint>
    </table>
    </schema>




    • <table> .. </table> = "Use for create and set table name"


    • <column> .. </column> = "Use for create and set column of the table"


    • <constraint> .. </constraint> = "Use for set constraint as like
      primary key, foreign key, unique key etc."


    Before running the upgrade command you need to add your schema to db_whitelist_schema.json file by running the following command :



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


    Now, there are db_whitelist_schema.json file will be create in /RH/Helloworld/etc folder.



    Now, run php bin/magento s:up



    Table will be create inside database.



    => If you want to renaming a column, you need to set below line in your db_schema.xml at appropriate column :



    <column xsi:type="varchar" name="customer_email" onCreate="migrateDataFrom(email)" on_update="false" nullable="false" default="" comment="Customer Email"/>


    here, name = "new column name" and onCreate="migrateDataFrom()" = "old column name"



    => If you want to drop table, then you can either remove entire table node from xml file or you can set disabled attribute to true as like below line in your db_schema.xml :



    <table name="rh_helloworld" resource="default" engine="innodb" comment="RH Helloworld" disabled="true">
    ..
    </table>


    Hope, It will helpful for you.






    share|improve this answer












    First of all, create db_schema.xml file inside /RH/Helloworld/etc and write the following code :



    <?xml version="1.0"?>
    <!--
    /**
    * Copyright © Magento, Inc. 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 name="rh_helloworld" resource="default" engine="innodb" comment="RH Helloworld">
    <column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="ID"/>
    <column xsi:type="varchar" name="author_name" nullable="false" length="25" comment="Name"/>
    <column xsi:type="varchar" name="email" nullable="false" length="25" comment="Email"/>
    <column xsi:type="varchar" name="description" nullable="false" length="255" comment="Descrition"/>
    <constraint xsi:type="primary" name="PRIMARY">
    <column name="id"/>
    </constraint>
    </table>
    </schema>




    • <table> .. </table> = "Use for create and set table name"


    • <column> .. </column> = "Use for create and set column of the table"


    • <constraint> .. </constraint> = "Use for set constraint as like
      primary key, foreign key, unique key etc."


    Before running the upgrade command you need to add your schema to db_whitelist_schema.json file by running the following command :



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


    Now, there are db_whitelist_schema.json file will be create in /RH/Helloworld/etc folder.



    Now, run php bin/magento s:up



    Table will be create inside database.



    => If you want to renaming a column, you need to set below line in your db_schema.xml at appropriate column :



    <column xsi:type="varchar" name="customer_email" onCreate="migrateDataFrom(email)" on_update="false" nullable="false" default="" comment="Customer Email"/>


    here, name = "new column name" and onCreate="migrateDataFrom()" = "old column name"



    => If you want to drop table, then you can either remove entire table node from xml file or you can set disabled attribute to true as like below line in your db_schema.xml :



    <table name="rh_helloworld" resource="default" engine="innodb" comment="RH Helloworld" disabled="true">
    ..
    </table>


    Hope, It will helpful for you.







    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered Nov 30 at 3:49









    Rohan Hapani

    5,38321561




    5,38321561








    • 1




      Good one @Rohan
      – Ramkishan Suthar
      Nov 30 at 4:36










    • Nice explanation..... Thank you so much.... It is really helpful....
      – harsh khandhar
      Nov 30 at 10:29










    • Happy to help !! Happy coding :) & Thank You @RamkishanSuthar
      – Rohan Hapani
      Nov 30 at 10:31














    • 1




      Good one @Rohan
      – Ramkishan Suthar
      Nov 30 at 4:36










    • Nice explanation..... Thank you so much.... It is really helpful....
      – harsh khandhar
      Nov 30 at 10:29










    • Happy to help !! Happy coding :) & Thank You @RamkishanSuthar
      – Rohan Hapani
      Nov 30 at 10:31








    1




    1




    Good one @Rohan
    – Ramkishan Suthar
    Nov 30 at 4:36




    Good one @Rohan
    – Ramkishan Suthar
    Nov 30 at 4:36












    Nice explanation..... Thank you so much.... It is really helpful....
    – harsh khandhar
    Nov 30 at 10:29




    Nice explanation..... Thank you so much.... It is really helpful....
    – harsh khandhar
    Nov 30 at 10:29












    Happy to help !! Happy coding :) & Thank You @RamkishanSuthar
    – Rohan Hapani
    Nov 30 at 10:31




    Happy to help !! Happy coding :) & Thank You @RamkishanSuthar
    – Rohan Hapani
    Nov 30 at 10:31












    up vote
    1
    down vote













    Create file named as db_schema.xml under etc folder in your any custom module.



    <?xml version="1.0" encoding="UTF-8"?>

    <schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
    <table name="books_data" resource="default" engine="innodb" comment="Book Table">
    <column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="BOOK ID"/>
    <column xsi:type="varchar" name="book_name" nullable="false" length="255" comment="Book Name"/>
    <column xsi:type="int" name="author" unsigned="true" nullable="true" identity="false" default="" comment="Author"/>
    <column xsi:type="varchar" name="isbn_no" nullable="true" comment="ISBN No"/>
    <column xsi:type="timestamp" name="publish_date" on_update="false" nullable="false" default="CURRENT_TIMESTAMP"
    comment="Publish Date"/>
    <column xsi:type="varchar" name="language" nullable="true" comment="Language"/>
    <column xsi:type="decimal" name="mrp" scale="4" precision="12" unsigned="false" nullable="false"
    default="0" comment="MRP"/>
    <constraint xsi:type="primary" name="PRIMARY">
    <column name="id"/>
    </constraint>
    </table>

    <table name="author_data" resource="default" engine="innodb" comment="Author Table">
    <column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="Author ID"/>
    <column xsi:type="varchar" name="author_name" nullable="false" length="255" comment="Author Name"/>
    <column xsi:type="varchar" name="author_email" nullable="false" length="255" comment="Author Email"/>
    <column xsi:type="varchar" name="affliation" nullable="false" length="255" comment="Affliation"/>
    <column xsi:type="int" name="age" unsigned="true" nullable="true" identity="false" default="" comment="Age"/>
    <constraint xsi:type="primary" name="PRIMARY">
    <column name="id"/>
    </constraint>
    </table>
    </schema>


    Now create db_whitelist_schema.json at same path



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


    After that just run php bin/magento setup:upgrade. For more information you can check Here . Let me know in case you need more explanation on this.






    share|improve this answer

























      up vote
      1
      down vote













      Create file named as db_schema.xml under etc folder in your any custom module.



      <?xml version="1.0" encoding="UTF-8"?>

      <schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
      <table name="books_data" resource="default" engine="innodb" comment="Book Table">
      <column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="BOOK ID"/>
      <column xsi:type="varchar" name="book_name" nullable="false" length="255" comment="Book Name"/>
      <column xsi:type="int" name="author" unsigned="true" nullable="true" identity="false" default="" comment="Author"/>
      <column xsi:type="varchar" name="isbn_no" nullable="true" comment="ISBN No"/>
      <column xsi:type="timestamp" name="publish_date" on_update="false" nullable="false" default="CURRENT_TIMESTAMP"
      comment="Publish Date"/>
      <column xsi:type="varchar" name="language" nullable="true" comment="Language"/>
      <column xsi:type="decimal" name="mrp" scale="4" precision="12" unsigned="false" nullable="false"
      default="0" comment="MRP"/>
      <constraint xsi:type="primary" name="PRIMARY">
      <column name="id"/>
      </constraint>
      </table>

      <table name="author_data" resource="default" engine="innodb" comment="Author Table">
      <column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="Author ID"/>
      <column xsi:type="varchar" name="author_name" nullable="false" length="255" comment="Author Name"/>
      <column xsi:type="varchar" name="author_email" nullable="false" length="255" comment="Author Email"/>
      <column xsi:type="varchar" name="affliation" nullable="false" length="255" comment="Affliation"/>
      <column xsi:type="int" name="age" unsigned="true" nullable="true" identity="false" default="" comment="Age"/>
      <constraint xsi:type="primary" name="PRIMARY">
      <column name="id"/>
      </constraint>
      </table>
      </schema>


      Now create db_whitelist_schema.json at same path



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


      After that just run php bin/magento setup:upgrade. For more information you can check Here . Let me know in case you need more explanation on this.






      share|improve this answer























        up vote
        1
        down vote










        up vote
        1
        down vote









        Create file named as db_schema.xml under etc folder in your any custom module.



        <?xml version="1.0" encoding="UTF-8"?>

        <schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
        <table name="books_data" resource="default" engine="innodb" comment="Book Table">
        <column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="BOOK ID"/>
        <column xsi:type="varchar" name="book_name" nullable="false" length="255" comment="Book Name"/>
        <column xsi:type="int" name="author" unsigned="true" nullable="true" identity="false" default="" comment="Author"/>
        <column xsi:type="varchar" name="isbn_no" nullable="true" comment="ISBN No"/>
        <column xsi:type="timestamp" name="publish_date" on_update="false" nullable="false" default="CURRENT_TIMESTAMP"
        comment="Publish Date"/>
        <column xsi:type="varchar" name="language" nullable="true" comment="Language"/>
        <column xsi:type="decimal" name="mrp" scale="4" precision="12" unsigned="false" nullable="false"
        default="0" comment="MRP"/>
        <constraint xsi:type="primary" name="PRIMARY">
        <column name="id"/>
        </constraint>
        </table>

        <table name="author_data" resource="default" engine="innodb" comment="Author Table">
        <column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="Author ID"/>
        <column xsi:type="varchar" name="author_name" nullable="false" length="255" comment="Author Name"/>
        <column xsi:type="varchar" name="author_email" nullable="false" length="255" comment="Author Email"/>
        <column xsi:type="varchar" name="affliation" nullable="false" length="255" comment="Affliation"/>
        <column xsi:type="int" name="age" unsigned="true" nullable="true" identity="false" default="" comment="Age"/>
        <constraint xsi:type="primary" name="PRIMARY">
        <column name="id"/>
        </constraint>
        </table>
        </schema>


        Now create db_whitelist_schema.json at same path



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


        After that just run php bin/magento setup:upgrade. For more information you can check Here . Let me know in case you need more explanation on this.






        share|improve this answer












        Create file named as db_schema.xml under etc folder in your any custom module.



        <?xml version="1.0" encoding="UTF-8"?>

        <schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
        <table name="books_data" resource="default" engine="innodb" comment="Book Table">
        <column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="BOOK ID"/>
        <column xsi:type="varchar" name="book_name" nullable="false" length="255" comment="Book Name"/>
        <column xsi:type="int" name="author" unsigned="true" nullable="true" identity="false" default="" comment="Author"/>
        <column xsi:type="varchar" name="isbn_no" nullable="true" comment="ISBN No"/>
        <column xsi:type="timestamp" name="publish_date" on_update="false" nullable="false" default="CURRENT_TIMESTAMP"
        comment="Publish Date"/>
        <column xsi:type="varchar" name="language" nullable="true" comment="Language"/>
        <column xsi:type="decimal" name="mrp" scale="4" precision="12" unsigned="false" nullable="false"
        default="0" comment="MRP"/>
        <constraint xsi:type="primary" name="PRIMARY">
        <column name="id"/>
        </constraint>
        </table>

        <table name="author_data" resource="default" engine="innodb" comment="Author Table">
        <column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="Author ID"/>
        <column xsi:type="varchar" name="author_name" nullable="false" length="255" comment="Author Name"/>
        <column xsi:type="varchar" name="author_email" nullable="false" length="255" comment="Author Email"/>
        <column xsi:type="varchar" name="affliation" nullable="false" length="255" comment="Affliation"/>
        <column xsi:type="int" name="age" unsigned="true" nullable="true" identity="false" default="" comment="Age"/>
        <constraint xsi:type="primary" name="PRIMARY">
        <column name="id"/>
        </constraint>
        </table>
        </schema>


        Now create db_whitelist_schema.json at same path



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


        After that just run php bin/magento setup:upgrade. For more information you can check Here . Let me know in case you need more explanation on this.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 30 at 3:32









        Ramkishan Suthar

        1,9241932




        1,9241932






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Magento Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f251884%2fmagento-2-3-how-to-implement-declarative-schema-in-custom-module%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            flock() on closed filehandle LOCK_FILE at /usr/bin/apt-mirror

            Mangá

             ⁒  ․,‪⁊‑⁙ ⁖, ⁇‒※‌, †,⁖‗‌⁝    ‾‸⁘,‖⁔⁣,⁂‾
”‑,‥–,‬ ,⁀‹⁋‴⁑ ‒ ,‴⁋”‼ ⁨,‷⁔„ ‰′,‐‚ ‥‡‎“‷⁃⁨⁅⁣,⁔
⁇‘⁔⁡⁏⁌⁡‿‶‏⁨ ⁣⁕⁖⁨⁩⁥‽⁀  ‴‬⁜‟ ⁃‣‧⁕‮ …‍⁨‴ ⁩,⁚⁖‫ ,‵ ⁀,‮⁝‣‣ ⁑  ⁂– ․, ‾‽ ‏⁁“⁗‸ ‾… ‹‡⁌⁎‸‘ ‡⁏⁌‪ ‵⁛ ‎⁨ ―⁦⁤⁄⁕