Javascript 有没有可能让GORM用一个空切片来填充nil值,而不是仅仅为nil?
我目前正在做一个项目,现在我有一些基本的JavascriptJavascript 有没有可能让GORM用一个空切片来填充nil值,而不是仅仅为nil?,javascript,go,go-gorm,Javascript,Go,Go Gorm,我目前正在做一个项目,现在我有一些基本的Javascript blah.map(函数(lBlah){}) blah是从对数据库的ajax请求生成的,该数据库返回一个对象数组(如果愿意,也可以是切片) 唯一的问题是我得到了一个JS错误:无法读取null的属性“map”这是因为如果我的一对多关联当时没有关联值,它只会使该字段nil而不是空片,因此当我json.Marshal时,它会发送一个null值,而不是一个空的[]这将修复我的所有错误,当前必须覆盖从数据库返回的每个结构,并检查零值,然后生成([
blah.map(函数(lBlah){})代码>
blah
是从对数据库的ajax请求生成的,该数据库返回一个对象数组(如果愿意,也可以是切片)
唯一的问题是我得到了一个JS错误:无法读取null的属性“map”
这是因为如果我的一对多
关联当时没有关联值,它只会使该字段nil
而不是空片,因此当我json.Marshal
时,它会发送一个null值,而不是一个空的[]
这将修复我的所有错误,当前必须覆盖从数据库返回的每个结构
,并检查零值,然后生成([]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)
您可以修改整个列表以检查您的字段是否为nil,然后用结构的空片段替换它,如下所示:
for i := range list {
if list[i].MainThreads== nil {
list[i].SubCategories = make([]ForumMainThreads, 0)
}
}
对所有属于任何类型切片的字段重复此操作您可以添加更多信息吗?你是如何定义模型的?你是如何查询的?@AbelardoMendoza updated我有一个类似的模式,具有一对多关系,切片作为空切片,并作为空数组正确地传递给前端。您可以在执行查询db.Preload(“MainThreads”).Find(&forumContainers)
之后立即尝试:fmt.Println(forumContainers.MainThreads)
。它也可能是GORM的旧版本。您使用的是哪个版本?@AbelardoMendoza据我所知,最近一次我只是在几个小时前做了一个go get
,我刚刚更新了我的gorm,并尝试了相同的一对多模型,但我仍然得到了空片。您在查询之后就尝试了fmt.Println吗?您也可以使用Gorm AfterFind钩子。看到这个了吗