2017-09-10 15 views
1

Runnerタイプのオブジェクトのリストを持つTaskタイプがあります。私はgolangのGORMを使用してデータベースにマッピングしようとしていますが、それは外部キーを持っていないと私は、移行時invalid associationを取得していますGolang GORMの外部キーが1対多の関連付けで作成されていません

マイタスク構造体:

type Task struct { 
    gorm.Model 
    Name  string `gorm:"not null;unique_index"` 
    Description string 
    Runners  []Runner 
} 

マイランナーの構造体:

type Runner struct { 
    gorm.Model 
    Name  string `gorm:"not null;unique"` 
    Description string 
} 

マイ移行コード:db.AutoMigrate(&Task{})オン

func migrateSchema() (err error) { 
    db, err := context.DBProvider() 

    if err != nil { 
     return 
    } 

    db.Model(&Task{}).Related(&Runner{}) 
    db.AutoMigrate(&Task{}) 
    db.AutoMigrate(&Runner{}) 

    return 
} 

私はを取得メッセージがコンソールに表示され、データベースをチェックするときに外部キーが作成されていないか、参照フィールドが作成されていないrunnersテーブル

何が間違っていますか?

答えて

0

私も同様の問題がありました。私はそれを理解するために永遠に私を受け取りました。私はGORMのドキュメントが間違いなく良いと信じています。ここでGORM siteから関連するコードスニペットがあります:

//User has many emails, UserID is the foreign key 
type User struct { 
    gorm.Model 
    Emails []Email 
} 

type Email struct { 
    gorm.Model 
    Email string 
    UserID uint 
} 

db.Model(&user).Related(&emails) 
//// SELECT * FROM emails WHERE user_id = 111; // 111 is user's primary key 

なぜあなたのコードが動作していません:あなたはランナーの構造体へのタスクIDフィールドを追加する必要が

  1. ファーストを。
  2. db.Model(&Task{}).Related(&Runner{})あなたが思うとは思わない。 GORMからコードスニペットを見ると、SELECTコメントの種類が説明されています(あまりよくありません)。この例では、&userがすでに入力され、IDが111であると仮定して、と一致する&emailsに格納されているメールを取り込みます。&userです。