How to call gorm alias properly?












1














Here is my code:



package main

import (
"fmt"
"time"

"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
)

type ClientCustomer struct {
Id int `json:"Id"`
Name string
Created time.Time
key string
UserId int `gorm:"user_id"`
Modified time.Time
}

func (ClientCustomer) TableName() string {
return "Client_customer"
}

type ClientCustomerInvitation struct {
Id int
CustomerId int `gorm:"customer_id"`
CodeInvitationId int `gorm:"codeinvitation_id"`
}

func (ClientCustomerInvitation) TableName() string {
return "Client_customer_invitation"
}

func main() {
db, err := gorm.Open("sqlite3", "db.sqlite3?cache=shared&mode=rwc")
if err != nil {
panic("failed to connect database")
}
defer db.Close()
var clientCustomer ClientCustomer
rows, err := db.Model(&ClientCustomer{}).Rows()
defer rows.Close()
if err != nil {
panic(err)
}
var clientCustomerInvitation ClientCustomerInvitation
for rows.Next() {
db.ScanRows(rows, &clientCustomer)
db.First(&clientCustomerInvitation, "customer_id = ?", clientCustomer.Id)
fmt.Println(clientCustomer)
fmt.Println(clientCustomerInvitation)

}

}


but I'm not fond of this line:



db.First(&clientCustomerInvitation, "customer_id = ?", clientCustomer.Id)


Is there a way to call "customer_id" from the struct directly instead of using a string?



Ideally I would like to do something like:



 db.First(&clientCustomerInvitation, ClientCustomerInvitation.CustomerId.gormAlias+" = ?", clientCustomer.Id)


I'm looking for a way to use the gorm alias for mapping the field in way that is more elegant and re usable than a mere string.










share|improve this question





























    1














    Here is my code:



    package main

    import (
    "fmt"
    "time"

    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/sqlite"
    )

    type ClientCustomer struct {
    Id int `json:"Id"`
    Name string
    Created time.Time
    key string
    UserId int `gorm:"user_id"`
    Modified time.Time
    }

    func (ClientCustomer) TableName() string {
    return "Client_customer"
    }

    type ClientCustomerInvitation struct {
    Id int
    CustomerId int `gorm:"customer_id"`
    CodeInvitationId int `gorm:"codeinvitation_id"`
    }

    func (ClientCustomerInvitation) TableName() string {
    return "Client_customer_invitation"
    }

    func main() {
    db, err := gorm.Open("sqlite3", "db.sqlite3?cache=shared&mode=rwc")
    if err != nil {
    panic("failed to connect database")
    }
    defer db.Close()
    var clientCustomer ClientCustomer
    rows, err := db.Model(&ClientCustomer{}).Rows()
    defer rows.Close()
    if err != nil {
    panic(err)
    }
    var clientCustomerInvitation ClientCustomerInvitation
    for rows.Next() {
    db.ScanRows(rows, &clientCustomer)
    db.First(&clientCustomerInvitation, "customer_id = ?", clientCustomer.Id)
    fmt.Println(clientCustomer)
    fmt.Println(clientCustomerInvitation)

    }

    }


    but I'm not fond of this line:



    db.First(&clientCustomerInvitation, "customer_id = ?", clientCustomer.Id)


    Is there a way to call "customer_id" from the struct directly instead of using a string?



    Ideally I would like to do something like:



     db.First(&clientCustomerInvitation, ClientCustomerInvitation.CustomerId.gormAlias+" = ?", clientCustomer.Id)


    I'm looking for a way to use the gorm alias for mapping the field in way that is more elegant and re usable than a mere string.










    share|improve this question



























      1












      1








      1







      Here is my code:



      package main

      import (
      "fmt"
      "time"

      "github.com/jinzhu/gorm"
      _ "github.com/jinzhu/gorm/dialects/sqlite"
      )

      type ClientCustomer struct {
      Id int `json:"Id"`
      Name string
      Created time.Time
      key string
      UserId int `gorm:"user_id"`
      Modified time.Time
      }

      func (ClientCustomer) TableName() string {
      return "Client_customer"
      }

      type ClientCustomerInvitation struct {
      Id int
      CustomerId int `gorm:"customer_id"`
      CodeInvitationId int `gorm:"codeinvitation_id"`
      }

      func (ClientCustomerInvitation) TableName() string {
      return "Client_customer_invitation"
      }

      func main() {
      db, err := gorm.Open("sqlite3", "db.sqlite3?cache=shared&mode=rwc")
      if err != nil {
      panic("failed to connect database")
      }
      defer db.Close()
      var clientCustomer ClientCustomer
      rows, err := db.Model(&ClientCustomer{}).Rows()
      defer rows.Close()
      if err != nil {
      panic(err)
      }
      var clientCustomerInvitation ClientCustomerInvitation
      for rows.Next() {
      db.ScanRows(rows, &clientCustomer)
      db.First(&clientCustomerInvitation, "customer_id = ?", clientCustomer.Id)
      fmt.Println(clientCustomer)
      fmt.Println(clientCustomerInvitation)

      }

      }


      but I'm not fond of this line:



      db.First(&clientCustomerInvitation, "customer_id = ?", clientCustomer.Id)


      Is there a way to call "customer_id" from the struct directly instead of using a string?



      Ideally I would like to do something like:



       db.First(&clientCustomerInvitation, ClientCustomerInvitation.CustomerId.gormAlias+" = ?", clientCustomer.Id)


      I'm looking for a way to use the gorm alias for mapping the field in way that is more elegant and re usable than a mere string.










      share|improve this question















      Here is my code:



      package main

      import (
      "fmt"
      "time"

      "github.com/jinzhu/gorm"
      _ "github.com/jinzhu/gorm/dialects/sqlite"
      )

      type ClientCustomer struct {
      Id int `json:"Id"`
      Name string
      Created time.Time
      key string
      UserId int `gorm:"user_id"`
      Modified time.Time
      }

      func (ClientCustomer) TableName() string {
      return "Client_customer"
      }

      type ClientCustomerInvitation struct {
      Id int
      CustomerId int `gorm:"customer_id"`
      CodeInvitationId int `gorm:"codeinvitation_id"`
      }

      func (ClientCustomerInvitation) TableName() string {
      return "Client_customer_invitation"
      }

      func main() {
      db, err := gorm.Open("sqlite3", "db.sqlite3?cache=shared&mode=rwc")
      if err != nil {
      panic("failed to connect database")
      }
      defer db.Close()
      var clientCustomer ClientCustomer
      rows, err := db.Model(&ClientCustomer{}).Rows()
      defer rows.Close()
      if err != nil {
      panic(err)
      }
      var clientCustomerInvitation ClientCustomerInvitation
      for rows.Next() {
      db.ScanRows(rows, &clientCustomer)
      db.First(&clientCustomerInvitation, "customer_id = ?", clientCustomer.Id)
      fmt.Println(clientCustomer)
      fmt.Println(clientCustomerInvitation)

      }

      }


      but I'm not fond of this line:



      db.First(&clientCustomerInvitation, "customer_id = ?", clientCustomer.Id)


      Is there a way to call "customer_id" from the struct directly instead of using a string?



      Ideally I would like to do something like:



       db.First(&clientCustomerInvitation, ClientCustomerInvitation.CustomerId.gormAlias+" = ?", clientCustomer.Id)


      I'm looking for a way to use the gorm alias for mapping the field in way that is more elegant and re usable than a mere string.







      go go-gorm






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Dec 5 at 11:29









      Flimzy

      37.2k96496




      37.2k96496










      asked Nov 23 at 10:00









      user462794

      18331848




      18331848
























          1 Answer
          1






          active

          oldest

          votes


















          1














          The only way to be able to get tag value from certain struct field, is by using reflect.



          My suggestion, create a function that return tag value from specific struct field. Something like below:



          func getGormAlias(obj interface{}, fieldName string) string {
          if field, ok := reflect.TypeOf(obj).FieldByName(fieldName); ok {
          return field.Tag.Get("gorm")
          }

          return ""
          }


          Then use it to get the tag value.



          gormAliasCustomerId := getGormAlias(ClientCustomerInvitation{}, "CustomerId")
          db.First(&clientCustomerInvitation, gormAliasCustomerId + " = ?", clientCustomer.Id)




          Basically what getGormAlias() function does:




          • Use the reflect.Type on obj to get the reflect.Type value.

          • Then call .FieldByName() to get the reflect.Value object from selected field name.

          • The tag information is available through .Tag property. Use that to get the tag value of gorm.






          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%2f53444434%2fhow-to-call-gorm-alias-properly%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            The only way to be able to get tag value from certain struct field, is by using reflect.



            My suggestion, create a function that return tag value from specific struct field. Something like below:



            func getGormAlias(obj interface{}, fieldName string) string {
            if field, ok := reflect.TypeOf(obj).FieldByName(fieldName); ok {
            return field.Tag.Get("gorm")
            }

            return ""
            }


            Then use it to get the tag value.



            gormAliasCustomerId := getGormAlias(ClientCustomerInvitation{}, "CustomerId")
            db.First(&clientCustomerInvitation, gormAliasCustomerId + " = ?", clientCustomer.Id)




            Basically what getGormAlias() function does:




            • Use the reflect.Type on obj to get the reflect.Type value.

            • Then call .FieldByName() to get the reflect.Value object from selected field name.

            • The tag information is available through .Tag property. Use that to get the tag value of gorm.






            share|improve this answer


























              1














              The only way to be able to get tag value from certain struct field, is by using reflect.



              My suggestion, create a function that return tag value from specific struct field. Something like below:



              func getGormAlias(obj interface{}, fieldName string) string {
              if field, ok := reflect.TypeOf(obj).FieldByName(fieldName); ok {
              return field.Tag.Get("gorm")
              }

              return ""
              }


              Then use it to get the tag value.



              gormAliasCustomerId := getGormAlias(ClientCustomerInvitation{}, "CustomerId")
              db.First(&clientCustomerInvitation, gormAliasCustomerId + " = ?", clientCustomer.Id)




              Basically what getGormAlias() function does:




              • Use the reflect.Type on obj to get the reflect.Type value.

              • Then call .FieldByName() to get the reflect.Value object from selected field name.

              • The tag information is available through .Tag property. Use that to get the tag value of gorm.






              share|improve this answer
























                1












                1








                1






                The only way to be able to get tag value from certain struct field, is by using reflect.



                My suggestion, create a function that return tag value from specific struct field. Something like below:



                func getGormAlias(obj interface{}, fieldName string) string {
                if field, ok := reflect.TypeOf(obj).FieldByName(fieldName); ok {
                return field.Tag.Get("gorm")
                }

                return ""
                }


                Then use it to get the tag value.



                gormAliasCustomerId := getGormAlias(ClientCustomerInvitation{}, "CustomerId")
                db.First(&clientCustomerInvitation, gormAliasCustomerId + " = ?", clientCustomer.Id)




                Basically what getGormAlias() function does:




                • Use the reflect.Type on obj to get the reflect.Type value.

                • Then call .FieldByName() to get the reflect.Value object from selected field name.

                • The tag information is available through .Tag property. Use that to get the tag value of gorm.






                share|improve this answer












                The only way to be able to get tag value from certain struct field, is by using reflect.



                My suggestion, create a function that return tag value from specific struct field. Something like below:



                func getGormAlias(obj interface{}, fieldName string) string {
                if field, ok := reflect.TypeOf(obj).FieldByName(fieldName); ok {
                return field.Tag.Get("gorm")
                }

                return ""
                }


                Then use it to get the tag value.



                gormAliasCustomerId := getGormAlias(ClientCustomerInvitation{}, "CustomerId")
                db.First(&clientCustomerInvitation, gormAliasCustomerId + " = ?", clientCustomer.Id)




                Basically what getGormAlias() function does:




                • Use the reflect.Type on obj to get the reflect.Type value.

                • Then call .FieldByName() to get the reflect.Value object from selected field name.

                • The tag information is available through .Tag property. Use that to get the tag value of gorm.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 23 at 10:13









                xpare

                4,6372248




                4,6372248






























                    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.





                    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%2fstackoverflow.com%2fquestions%2f53444434%2fhow-to-call-gorm-alias-properly%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

                    Contact image not getting when fetch all contact list from iPhone by CNContact

                    count number of partitions of a set with n elements into k subsets

                    A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks