go - Unable to create Associations via golang orm library -
i've been trying use associations feature in golang orm (https://github.com/jinzhu/gorm/), , unable create pretty simple association. in example below, user table contains data, email table not. i've tried bunch of things , i'm missing basic, have been unable find right answer in github/stackoverflow.
code :
package main import ( "database/sql" "log" "github.com/jinzhu/gorm" "github.com/mattn/go-sqlite3" ) var db gorm.db type user struct { name string mail email } type email struct { address string } //initialize db . func initdb() { var db_driver string sql.register(db_driver, &sqlite3.sqlitedriver{}) log.printf("initializing database ", db_driver) dbsql, _ := sql.open(db_driver, "simple-sqlite") var err error db, err = gorm.open("sqlite3", dbsql) if err != nil { log.fatalf("got error when connecting database, error '%v'", err) } db.logmode(true) // invoke `*sql.db`'s functions db.db().ping() db.db().setmaxidleconns(10) db.db().setmaxopenconns(100) // disable table name's pluralization db.singulartable(true) } func initschema() { db.createtable(&user{}, &email{}) } func dostuff() { user := user{name: "jinzhu", mail: email{address: "hello@hello.com"}} db.create(&user) } func main() { initdb() initschema() dostuff() } go run main.go prints following output 2015/09/30 17:25:04 initializing database %!(extra string=)
[2015-09-30 17:25:04] [3.21ms] create table "user" ("name" varchar(255))
[2015-09-30 17:25:04] [4.01ms] create table "email" ("address" varchar(255) )
[2015-09-30 17:25:04] [0.54ms] insert "user" ("name") values ('jinzhu')
not sure i'm missing here - appreciate response!
you're missing primary/foreign key references each of models, here's updated code:
package main import ( "database/sql" "log" "github.com/jinzhu/gorm" "github.com/mattn/go-sqlite3" ) var db gorm.db type user struct { id uint `gorm:"primary_key"` name string mail email mailid sql.nullint64 } type email struct { id uint `gorm:"primary_key"` address string } //initialize db . func initdb() { var db_driver string sql.register(db_driver, &sqlite3.sqlitedriver{}) log.printf("initializing database ", db_driver) dbsql, _ := sql.open(db_driver, "simple-sqlite") var err error db, err = gorm.open("sqlite3", dbsql) if err != nil { log.fatalf("got error when connecting database, error '%v'", err) } db.logmode(true) // invoke `*sql.db`'s functions db.db().ping() db.db().setmaxidleconns(10) db.db().setmaxopenconns(100) // disable table name's pluralization db.singulartable(true) } func initschema() { db.createtable(&user{}, &email{}) } func dostuff() { user := user{name: "jinzhu", mail: email{address: "hello@hello.com"}} db.create(&user) } func main() { initdb() initschema() dostuff() } notice primary keys on user , email structs foreign key reference on user
Comments
Post a Comment