Home > Net >  Go GORM two table requests
Go GORM two table requests

Time:09-08

So I am new to GORM and I have this task where I have two tables accounts and users

I get the user.Id and I need to get the accountId from the user table afterwards I need to only get the account that has the same Id as user.AccountId

type User struct{
    Id int
    AccountId int
}

type Account struct{
    Id int
    Balance int
}

It looks like this should be a pretty simple call to do it in a single request, but I can't find a simple implementation for this logic. Can anyone help me

CodePudding user response:

There are multiple ways to do this, and below are a couple of them. I'm assuming that the db variable is of type *gorm.DB. Also, I'm the code below is suited for MySQL (minor changes are needed for PostgreSQL).

Load just the Account data with joins

var account Account
err := db.Joins("JOIN users ON users.account_id = account.id").Where("users.id = ?", user.Id).First(&account).Error

Load the User object with the Account data

Here there are a few changes to the User struct, but the underlying code is simpler. Also, it loads the entire User object, with the related Account object.

type User struct{
    Id int
    AccountId int
    Account Account
}

var fullUser User
err := db.Preload("Account").First(&fullUser, user.Id).Error
  • Related