Sequelize - How to setup foreign key and join on it










0















I have two tables; userPermissions & permissionItems. userPermissions has a permissionItemId as a foreign key, defined as



CONSTRAINT `fk_userPermissions_permissionItemId`
FOREIGN KEY (`permissionItemId`)
REFERENCES `mydb`.`permissionItems` (`permissionItemId`)


Their Sequelize definitions are



const PermissionItem = db.define('permissionItems', 
permissionItemId:
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true

);


const UserPermission = db.define('userPermissions',
userPermissionsId:
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true
,
permissionItemId:
type: Sequelize.INTEGER,
references: 'permissionItems',
referencesKey: 'permissionItemId'

);
UserPermission.hasOne(PermissionItem);


I am then trying to join those two with the and view the results with



UserPermission.findAll(
include: [
model: PermissionItem
]
).then(userPermission =>
console.log('userPermission', userPermission);
);


My expectation here is to get a list of all UserPermissions and outer left join PermissionItem on permissionItemId. Instead, I receive the below error




Unhandled rejection SequelizeDatabaseError: Unknown column
'permissionItem.userPermissionUserPermissionsId' in 'field list'




Have I constructed the query incorrectly? Or the Sequelize definitions?



I have tried flipping these around and including the reverse, and applying the keys backward, in every combination I could think of, all to no avail










share|improve this question


























    0















    I have two tables; userPermissions & permissionItems. userPermissions has a permissionItemId as a foreign key, defined as



    CONSTRAINT `fk_userPermissions_permissionItemId`
    FOREIGN KEY (`permissionItemId`)
    REFERENCES `mydb`.`permissionItems` (`permissionItemId`)


    Their Sequelize definitions are



    const PermissionItem = db.define('permissionItems', 
    permissionItemId:
    type: Sequelize.INTEGER,
    autoIncrement: true,
    primaryKey: true

    );


    const UserPermission = db.define('userPermissions',
    userPermissionsId:
    type: Sequelize.INTEGER,
    autoIncrement: true,
    primaryKey: true
    ,
    permissionItemId:
    type: Sequelize.INTEGER,
    references: 'permissionItems',
    referencesKey: 'permissionItemId'

    );
    UserPermission.hasOne(PermissionItem);


    I am then trying to join those two with the and view the results with



    UserPermission.findAll(
    include: [
    model: PermissionItem
    ]
    ).then(userPermission =>
    console.log('userPermission', userPermission);
    );


    My expectation here is to get a list of all UserPermissions and outer left join PermissionItem on permissionItemId. Instead, I receive the below error




    Unhandled rejection SequelizeDatabaseError: Unknown column
    'permissionItem.userPermissionUserPermissionsId' in 'field list'




    Have I constructed the query incorrectly? Or the Sequelize definitions?



    I have tried flipping these around and including the reverse, and applying the keys backward, in every combination I could think of, all to no avail










    share|improve this question
























      0












      0








      0








      I have two tables; userPermissions & permissionItems. userPermissions has a permissionItemId as a foreign key, defined as



      CONSTRAINT `fk_userPermissions_permissionItemId`
      FOREIGN KEY (`permissionItemId`)
      REFERENCES `mydb`.`permissionItems` (`permissionItemId`)


      Their Sequelize definitions are



      const PermissionItem = db.define('permissionItems', 
      permissionItemId:
      type: Sequelize.INTEGER,
      autoIncrement: true,
      primaryKey: true

      );


      const UserPermission = db.define('userPermissions',
      userPermissionsId:
      type: Sequelize.INTEGER,
      autoIncrement: true,
      primaryKey: true
      ,
      permissionItemId:
      type: Sequelize.INTEGER,
      references: 'permissionItems',
      referencesKey: 'permissionItemId'

      );
      UserPermission.hasOne(PermissionItem);


      I am then trying to join those two with the and view the results with



      UserPermission.findAll(
      include: [
      model: PermissionItem
      ]
      ).then(userPermission =>
      console.log('userPermission', userPermission);
      );


      My expectation here is to get a list of all UserPermissions and outer left join PermissionItem on permissionItemId. Instead, I receive the below error




      Unhandled rejection SequelizeDatabaseError: Unknown column
      'permissionItem.userPermissionUserPermissionsId' in 'field list'




      Have I constructed the query incorrectly? Or the Sequelize definitions?



      I have tried flipping these around and including the reverse, and applying the keys backward, in every combination I could think of, all to no avail










      share|improve this question














      I have two tables; userPermissions & permissionItems. userPermissions has a permissionItemId as a foreign key, defined as



      CONSTRAINT `fk_userPermissions_permissionItemId`
      FOREIGN KEY (`permissionItemId`)
      REFERENCES `mydb`.`permissionItems` (`permissionItemId`)


      Their Sequelize definitions are



      const PermissionItem = db.define('permissionItems', 
      permissionItemId:
      type: Sequelize.INTEGER,
      autoIncrement: true,
      primaryKey: true

      );


      const UserPermission = db.define('userPermissions',
      userPermissionsId:
      type: Sequelize.INTEGER,
      autoIncrement: true,
      primaryKey: true
      ,
      permissionItemId:
      type: Sequelize.INTEGER,
      references: 'permissionItems',
      referencesKey: 'permissionItemId'

      );
      UserPermission.hasOne(PermissionItem);


      I am then trying to join those two with the and view the results with



      UserPermission.findAll(
      include: [
      model: PermissionItem
      ]
      ).then(userPermission =>
      console.log('userPermission', userPermission);
      );


      My expectation here is to get a list of all UserPermissions and outer left join PermissionItem on permissionItemId. Instead, I receive the below error




      Unhandled rejection SequelizeDatabaseError: Unknown column
      'permissionItem.userPermissionUserPermissionsId' in 'field list'




      Have I constructed the query incorrectly? Or the Sequelize definitions?



      I have tried flipping these around and including the reverse, and applying the keys backward, in every combination I could think of, all to no avail







      sequelize.js






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 15 '18 at 17:29









      Joshua OhanaJoshua Ohana

      2,22552567




      2,22552567






















          2 Answers
          2






          active

          oldest

          votes


















          0














          In your userPermissions model,
          Instead of this



          UserPermission.hasOne(PermissionItem);


          try this



          UserPermission.belongsTo(PermissionItem,foreignKey:'permissionItemId');



          HasOne and BelongsTo insert the association key in different models
          from each other. HasOne inserts the association key in target model
          whereas BelongsTo inserts the association key in the source model.







          share|improve this answer























          • docs.sequelizejs.com/manual/tutorial/associations.html

            – Pathum Samararathna
            Nov 15 '18 at 18:07


















          0














          I ended up changing UserPermission to the below. Looks like I don't need to define anything special in the Sequelize model for an existing foreign key in the database, just need to list it in the hasOne call



          UserPermission = db.define('userPermissions', 
          userPermissionsId:
          type: Sequelize.INTEGER,
          autoIncrement: true,
          primaryKey: true
          ,
          permissionItemId:
          type: Sequelize.INTEGER

          );
          UserPermission.hasMany(PermissionItem, foreignKey: 'permissionItemId', sourceKey: 'permissionItemId' );





          share|improve this answer
























            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            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',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            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%2fstackoverflow.com%2fquestions%2f53324942%2fsequelize-how-to-setup-foreign-key-and-join-on-it%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









            0














            In your userPermissions model,
            Instead of this



            UserPermission.hasOne(PermissionItem);


            try this



            UserPermission.belongsTo(PermissionItem,foreignKey:'permissionItemId');



            HasOne and BelongsTo insert the association key in different models
            from each other. HasOne inserts the association key in target model
            whereas BelongsTo inserts the association key in the source model.







            share|improve this answer























            • docs.sequelizejs.com/manual/tutorial/associations.html

              – Pathum Samararathna
              Nov 15 '18 at 18:07















            0














            In your userPermissions model,
            Instead of this



            UserPermission.hasOne(PermissionItem);


            try this



            UserPermission.belongsTo(PermissionItem,foreignKey:'permissionItemId');



            HasOne and BelongsTo insert the association key in different models
            from each other. HasOne inserts the association key in target model
            whereas BelongsTo inserts the association key in the source model.







            share|improve this answer























            • docs.sequelizejs.com/manual/tutorial/associations.html

              – Pathum Samararathna
              Nov 15 '18 at 18:07













            0












            0








            0







            In your userPermissions model,
            Instead of this



            UserPermission.hasOne(PermissionItem);


            try this



            UserPermission.belongsTo(PermissionItem,foreignKey:'permissionItemId');



            HasOne and BelongsTo insert the association key in different models
            from each other. HasOne inserts the association key in target model
            whereas BelongsTo inserts the association key in the source model.







            share|improve this answer













            In your userPermissions model,
            Instead of this



            UserPermission.hasOne(PermissionItem);


            try this



            UserPermission.belongsTo(PermissionItem,foreignKey:'permissionItemId');



            HasOne and BelongsTo insert the association key in different models
            from each other. HasOne inserts the association key in target model
            whereas BelongsTo inserts the association key in the source model.








            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Nov 15 '18 at 18:07









            Pathum SamararathnaPathum Samararathna

            9441031




            9441031












            • docs.sequelizejs.com/manual/tutorial/associations.html

              – Pathum Samararathna
              Nov 15 '18 at 18:07

















            • docs.sequelizejs.com/manual/tutorial/associations.html

              – Pathum Samararathna
              Nov 15 '18 at 18:07
















            docs.sequelizejs.com/manual/tutorial/associations.html

            – Pathum Samararathna
            Nov 15 '18 at 18:07





            docs.sequelizejs.com/manual/tutorial/associations.html

            – Pathum Samararathna
            Nov 15 '18 at 18:07













            0














            I ended up changing UserPermission to the below. Looks like I don't need to define anything special in the Sequelize model for an existing foreign key in the database, just need to list it in the hasOne call



            UserPermission = db.define('userPermissions', 
            userPermissionsId:
            type: Sequelize.INTEGER,
            autoIncrement: true,
            primaryKey: true
            ,
            permissionItemId:
            type: Sequelize.INTEGER

            );
            UserPermission.hasMany(PermissionItem, foreignKey: 'permissionItemId', sourceKey: 'permissionItemId' );





            share|improve this answer





























              0














              I ended up changing UserPermission to the below. Looks like I don't need to define anything special in the Sequelize model for an existing foreign key in the database, just need to list it in the hasOne call



              UserPermission = db.define('userPermissions', 
              userPermissionsId:
              type: Sequelize.INTEGER,
              autoIncrement: true,
              primaryKey: true
              ,
              permissionItemId:
              type: Sequelize.INTEGER

              );
              UserPermission.hasMany(PermissionItem, foreignKey: 'permissionItemId', sourceKey: 'permissionItemId' );





              share|improve this answer



























                0












                0








                0







                I ended up changing UserPermission to the below. Looks like I don't need to define anything special in the Sequelize model for an existing foreign key in the database, just need to list it in the hasOne call



                UserPermission = db.define('userPermissions', 
                userPermissionsId:
                type: Sequelize.INTEGER,
                autoIncrement: true,
                primaryKey: true
                ,
                permissionItemId:
                type: Sequelize.INTEGER

                );
                UserPermission.hasMany(PermissionItem, foreignKey: 'permissionItemId', sourceKey: 'permissionItemId' );





                share|improve this answer















                I ended up changing UserPermission to the below. Looks like I don't need to define anything special in the Sequelize model for an existing foreign key in the database, just need to list it in the hasOne call



                UserPermission = db.define('userPermissions', 
                userPermissionsId:
                type: Sequelize.INTEGER,
                autoIncrement: true,
                primaryKey: true
                ,
                permissionItemId:
                type: Sequelize.INTEGER

                );
                UserPermission.hasMany(PermissionItem, foreignKey: 'permissionItemId', sourceKey: 'permissionItemId' );






                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Nov 15 '18 at 19:39

























                answered Nov 15 '18 at 18:31









                Joshua OhanaJoshua Ohana

                2,22552567




                2,22552567



























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Stack Overflow!


                    • 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%2fstackoverflow.com%2fquestions%2f53324942%2fsequelize-how-to-setup-foreign-key-and-join-on-it%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







                    這個網誌中的熱門文章

                    How to read a connectionString WITH PROVIDER in .NET Core?

                    Node.js Script on GitHub Pages or Amazon S3

                    Museum of Modern and Contemporary Art of Trento and Rovereto