英文:
Trouble retrieving Has Many using Gorm
问题
当我尝试从播客中获取剧集时,我得到了invalid association []
的错误。不确定我做错了什么。
package main
import (
"log"
"github.com/jinzhu/gorm"
_ "github.com/mattn/go-sqlite3"
)
type Podcast struct {
Id int
Title string
RssUrl string `sql:"unique_index"`
Url string
Episodes []Episode
}
type Episode struct {
Id int
PodcastID int `sql:"index"`
Title string
Url string `sql:"unique_index"`
Downloaded bool
}
func main() {
db, err := gorm.Open("sqlite3", "gorm.db")
if err != nil {
log.Fatal(err)
}
db.LogMode(true)
db.CreateTable(&Podcast{})
db.CreateTable(&Episode{})
podcast := Podcast{
Title: "My Podcast",
RssUrl: "http://example.com/feed/",
Url: "http://www.example.com",
Episodes: []Episode{{Title: "Episode One Point Oh!", Url: "http://www.example.com/one-point-oh", Downloaded: false}},
}
var episodes []Episode
db.Model(&podcast).Related(&episodes)
}
英文:
When I try to get episodes back from a podcast I get invalid association []
. Not sure what I'm doing wrong.
package main
import (
"log"
"github.com/jinzhu/gorm"
_ "github.com/mattn/go-sqlite3"
)
type Podcast struct {
Id int
Title string
RssUrl string `sql:"unique_index"`
Url string
Episodes []Episode
}
type Episode struct {
Id int
PodcastID int `sql:"index"`
Title string
Url string `sql:"unique_index"`
Downloaded bool
}
func main() {
db, err := gorm.Open("sqlite3", "gorm.db")
if err != nil {
log.Fatal(err)
}
db.LogMode(true)
db.CreateTable(&Podcast{})
db.CreateTable(&Episode{})
podcast := Podcast{
Title: "My Podcast",
RssUrl: "http://example.com/feed/",
Url: "http://www.example.com",
Episodes: []Episode{{Title: "Episode One Point Oh!", Url: "http://www.example.com/one-point-oh", Downloaded: false}},
}
var episodes []Episode
db.Model(&podcast).Related(&episodes)
}
答案1
得分: 1
你正在使用的GO和GORM版本是哪个?我在我的机器上尝试了一下,这是日志:
[2015-06-17 19:02:11] [12.00ms] CREATE TABLE "podcasts" ("id" integer,"title" varchar(255),"rss_url" varchar(255),"url" varchar(255) , PRIMARY KEY ("id"))
[2015-06-17 19:02:11] [1.26ms] CREATE TABLE "episodes" ("id" integer,"podcast_id" integer,"title" varchar(255),"url" varchar(255),"downloaded" bool , PRIMARY KEY ("id"))
[2015-06-17 19:02:11] [1.25ms] SELECT * FROM "episodes" WHERE ("podcast_id" = '0')
请注意,因为您没有创建podcast变量,所以podcast_id为0,所以查询没有太多意义。
为了创建podcast,只需添加以下代码:
db.NewRecord(podcast)
db.Create(&podcast)
var episodes []Episode
db.Model(&podcast).Related(&episodes)
log.Print(episodes)
英文:
Which version of GO and GORM are you using? I've tried on my machine and this is the log:
[2015-06-17 19:02:11] [12.00ms] CREATE TABLE "podcasts" ("id" integer,"title" varchar(255),"rss_url" varchar(255),"url" varchar(255) , PRIMARY KEY ("id"))
[2015-06-17 19:02:11] [1.26ms] CREATE TABLE "episodes" ("id" integer,"podcast_id" integer,"title" varchar(255),"url" varchar(255),"downloaded" bool , PRIMARY KEY ("id"))
[2015-06-17 19:02:11] [1.25ms] SELECT * FROM "episodes" WHERE ("podcast_id" = '0')
Please note that because you didn't create the podcast variable, the podcast_id is 0 so the query does not make so much sense.
In order to create the podcast, simply add this code
db.NewRecord(podcast)
db.Create(&podcast)
var episodes []Episode
db.Model(&podcast).Related(&episodes)
log.Print(episodes)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论