登录
首页 >  Golang >  Go问答

gorm如何查询非空列的数据

来源:stackoverflow

时间:2024-02-16 15:06:23 278浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《gorm如何查询非空列的数据》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

这是我的两个模型,我想让我的代码返回所有内部有节点的路径,并排除所有内部没有节点的路径

type path struct {
    gorm.model
    id          uuid.uuid `json:"id" gorm:"type:uuid;primary_key"`
    name        string    `json:"name" gorm:"type:varchar(255)"`
    description string    `json:"description" gorm:"type:varchar(255)"`
    userid      uuid.uuid `json:"user_id" gorm:"type:uuid"`
    owner       user      `json:"owner" gorm:"foreignkey:userid"`
    nodes       []node    `gorm:"foreignkey:pathid"`
}

type node struct {
    gorm.model
    id          uuid.uuid `json:"_id" gorm:"type:uuid;primary_key"`
    name        string    `json:"name" gorm:"type:varchar(255)"`
    description string    `json:"description" gorm:"type:varchar(255)"`
    url         string    `json:"url" gorm:"required"`
    nodetype    string    `json:"nodetype" gorm:"type:varchar(255)"`
    pathid      uuid.uuid `json:"path_id" gorm:"type:uuid"`
    path        path      `gorm:"foreignkey:pathid"`
}

func (path *path) beforecreate(tx *gorm.db) (err error) {
    // uuid version 4
    path.id = uuid.new()
    return
}

func (node *node) beforecreate(tx *gorm.db) (err error) {
    // uuid version 4
    node.id = uuid.new()
    return
}

我想获取节点可用的所有路径

我尝试过这种方法,但不起作用

func GetAllPaths(c *fiber.Ctx) error {
    db := database.DB

    paths := []models.Path{}

    err := db.Debug().Joins("Owner").Preload("Nodes").Where("nodes IS NOT NULL").Find(&paths).Error
    if err != nil {
        return c.Status(500).SendString(err.Error())
    }

    var allPaths []serializer.PathResponseStruct

    for _, path := range paths {
        rpath := serializer.PathResponse(path)
        allPaths = append(allPaths, rpath)
    }

    return c.Status(200).JSON(allPaths)
}

我想要的响应是带有节点的数组路径,而不是空节点数组(null)


正确答案


您可以添加额外的 inner join 以仅加载具有节点的路径。它看起来像这样:

paths := []models.Path{}
err := db.Debug().Preload("Owner").Preload("Nodes").    //if you want to load the Path inside the node, then it should be .Preload("Nodes.Path")
          Joins("INNER JOIN nodes ON nodes.path_id = paths.id").Find(&paths).Error

本篇关于《gorm如何查询非空列的数据》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>