Как получить значения структуры (внутри структуры) в gorm

Я новичок в Golang и GORM. У меня есть проблемы с этим. Как я могу получить значение внутренней структуры? (Как вложенная структура в golang), я пробовал, но не получил фактического результата.

У меня есть три структуры

Структура отдела

type Department struct {
    gorm.Model
    DepartmentName string
    DeptCode       string
    Employee       Employee //Employee struct
}

Структура сотрудников

type Employee struct {
    gorm.Model
    EmpId           string
    EmpName         string
    DepartmentID    uint //Department id
    EmployeeContact []EmployeeContact //Array of Employee contact
}

Контактное лицо сотрудника

type EmployeeContact struct {
    gorm.Model
    ContactType string
    ContacText  string
    EmployeeID  uint //Employee Id
}

Отношения

# Департамент является родителем сотрудника.

# Сотрудник является родительским для контактов сотрудника.

Я использовал GORM (Joins)

var departmentStruct model.Department
var employeeStruct model.Employee

    db.Debug().Model(&departmentStruct).Joins("JOIN employees ON employees.department_id = departments.id").Joins("JOIN employee_contacts ON employee_contacts.employee_id = employees.id").Select("employees.id,departments.department_name,departments.dept_code,employees.emp_id,employees.emp_name,employee_contacts.contact_type").Scan(&employeeStruct)
    res1B, _ := json.Marshal(employeeStruct)
    fmt.Fprintln(w, string(res1B))

Будет возвращено output

{

    "ID":1,
    "EmpId":"001",
    "EmpName":"samsung",
    "DepartmentID":0, 
    "EmployeeContact":{ //It will be return empty
        "ID":0,
        "CreatedAt":"0001-01-01T00:00:00Z",
        "UpdatedAt":"0001-01-01T00:00:00Z",
        "DeletedAt":null,
        "ContactType":"",
        "ContacText":"",
        "EmployeeID":0
    }

}

Мне нужно, когда я передаю сотруднику id, он будет возвращен, как указано ниже в формате

{

    "ID":1,
    "EmpId":"001",
    "EmpName":"samsung",
    "Department":{
        "ID":1,
        "CreatedAt":"0001-01-01T00:00:00Z",
        "UpdatedAt":"0001-01-01T00:00:00Z",
        "DeletedAt":null,
        "DepartmentName":"Software Analyst",
        "deptCode":"SA"
    },
    "EmployeeContact":[
        {
            "ID":1,
            "CreatedAt":"0001-01-01T00:00:00Z",
            "UpdatedAt":"0001-01-01T00:00:00Z",
            "DeletedAt":null,
            "ContactType":"Home",
            "ContacText":"1234567890",
            "EmployeeID":1
        },
        {
            "ID":2,
            "CreatedAt":"0001-01-01T00:00:00Z",
            "UpdatedAt":"0001-01-01T00:00:00Z",
            "DeletedAt":null,
            "ContactType":"Office",
            "ContacText":"0123456789",
            "EmployeeID":1
        }
    ]
}

Кто-нибудь может меня научить ?. Как я могу этого добиться. Спасибо.


person Udayakumar    schedule 11.07.2018    source источник
comment
Какие данные возвращаются из базы данных. что вы разупорядочиваете   -  person Himanshu    schedule 11.07.2018
comment
База данных возвращает {ID: 1, EmpId: 001, EmpName: samsung, DepartmentID: 0, EmployeeContact: {// Будет возвращен пустой идентификатор: 0, CreatedAt: 0001-01-01T00: 00: 00Z, UpdatedAt: 0001- 01-01T00: 00: 00Z, DeletedAt: null, ContactType :, ContacText :, EmployeeID: 0}} @Himanshu   -  person Udayakumar    schedule 11.07.2018


Ответы (1)


Прежде всего, вы, вероятно, хотите, чтобы это нравилось вашей модели сотрудника.

type Employee struct {
    gorm.Model
    EmpId           string
    EmpName         string
    Department      Department
    DepartmentID    uint //Department id
    EmployeeContact []EmployeeContact //Array of Employee contact
}

И тогда эта предварительная нагрузка должна помочь

var employee []model.Employee

err := db.Preload("Department").Preload("EmployeeContact").Find(&employee).Error

и их параметр сотрудника должен иметь список всех сотрудников в вашей системе с предварительно загруженными отношениями

person ttomalak    schedule 11.07.2018