2

我目前正在做一个项目,现在我有一些基本的 Javascript

blah.map(function(lBlah) {});

blah从 ajax 请求生成到数据库,该数据库返回对象数组(或切片,如果您愿意)

唯一的问题是我收到一个 JS 错误:cannot read property 'map' of null这是因为如果我的one-to-many关联当时没有关联的值,它只会生成该字段nil而不是空切片,所以当我json.Marshal发送空值而不是空值时,[]它会修复我所有的错误,目前必须覆盖struct从数据库返回的每个错误并检查 nil 值然后make([]blah, 0)很烦人并且看起来很乱。有没有更简单的方法来实现这一点?是否可以设置默认值json:"default:[]"或其他内容?

// ForumContainer is a table in the database
type ForumContainer struct {
    gorm.Model
    ContainerName string `sql:"not null;unique"`
    AccessLevel   int    `sql:"not null;default:0"`
    MainThreads   []ForumMainThreads
}

// ForumMainThreads is the table in the database
type ForumMainThreads struct {
    gorm.Model
    ForumContainerID int    `sql:"index"`
    ThreadName       string `sql:"not null;unique"`
    Threads          int    `sql:"not null;default:0"`
    Replies          int    `sql:"not null;default:0"`
    AccessLevel      int    `sql:"not null;default:0"`
    Posts            []ForumMainThreadsPosts
}

// ForumMainThreadsPosts is a table in the database
type ForumMainThreadsPosts struct {
    gorm.Model
    UserID             int    `sql:"index"`
    ForumMainThreadsID int    `sql:"index"`
    Title              string `sql:"not null;unique"`
    Body               string `sql:"type:text;not null"`
    Sticky             bool   `sql:"not null;default:0"`
    Views              int    `sql:"not null;default:0"`
    ReplyCount         int    `sql:"not null;default:0"`
    Replies            []ForumMainPostsReplies
}

// ForumMainPostsReplies is a table in the database
type ForumMainPostsReplies struct {
    gorm.Model
    ForumMainThreadsPostsID int `sql:"index"`
    UserID                  int `sql:"index"`
    Body                    string
}

查询通过以下方式完成:

db.Preload("MainThreads").Find(&forumContainers)

4

1 回答 1

0

您可以修改整个列表以检查您的归档是否为 nil,然后将其替换为结构的空切片,如下所示:

for i := range list {
    if list[i].MainThreads== nil {
        list[i].SubCategories = make([]ForumMainThreads, 0)
    }
}

并对任何类型的切片的所有字段重复此操作

于 2021-05-22T16:05:38.900 回答