在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/GO  網(wǎng)絡(luò)安全/ 關(guān)于 Gorm 關(guān)聯(lián)查詢的問題,糾結(jié)許久,求解

關(guān)于 Gorm 關(guān)聯(lián)查詢的問題,糾結(jié)許久,求解

一、結(jié)構(gòu)體定義

type Article struct {
    ID int `gorm:"primary_key" json:"id"`
    TagID int `json:"tag_id"`
    Tag   Tag `json:"tag"`
    ...
}

type Tag struct {
    ID uint `gorm:"primary_key" json:"id"`
    Name string `json:"name"`
    ...
}

二、調(diào)用方法

單個查詢
func GetArticle(id int) (article Article) {
    db.Where("id = ?", id).First(&article)
    db.Model(&article).Related(&article.Tag)

    return 
}

問題

現(xiàn)在問題是,單個查詢可以,但是假設(shè)是使用Find呢,Related那句關(guān)聯(lián)查詢,顯然有問題,
因為article已經(jīng)是多個了,應(yīng)該如何寫??

func GetArticles(id int) (article []Article) {
    db.Where("id = ?", id).Find(&article)
    
    //注,這里的關(guān)聯(lián)查詢就顯然有問題了,此處應(yīng)該如何改寫?
    db.Model(&article).Related(&article.Tag)

    return 
}

1、循環(huán)的話應(yīng)該不可能吧???

2、JOIN 查詢構(gòu)造器,應(yīng)該可以實現(xiàn),但是要把關(guān)聯(lián)的字段也定義在結(jié)構(gòu)體上(感覺不大好,而且屬于繞過當(dāng)前問題)

ps: Gorm文檔看了一大波,也又百又谷了不少;但是沒看到/解決到我的疑問,求助求解

謝謝?。?!


補充 - 表結(jié)構(gòu):

CREATE TABLE `test_article` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `tag_id` int(10) unsigned DEFAULT '0' COMMENT '標(biāo)簽ID',
   ...
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文章管理';

CREATE TABLE `test_tag` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT '' COMMENT '標(biāo)簽名稱',
  ...
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文章標(biāo)簽管理';
回答
編輯回答
挽歌

已解決

最后在stackoverflow找到了答案,采用Preload的方式解決

而在不采用Preload、JOIN查詢構(gòu)造器的情況下,循環(huán)查詢關(guān)聯(lián)的確是目前的唯一辦法


struct字段按場景來說沒有錯,大舒說的是另外的情況,不能解決我當(dāng)前問題,感謝他的回答

2017年1月19日 10:49
編輯回答
念初

目測應(yīng)該是struct的字段問題。

如果你這個按照官方例子來改的話,
Tag需要加一個字段ArticleId,
然后查詢時自然會把ArticleId當(dāng)做Article模型的外鍵來查詢。

type Tag struct {
    ID uint `gorm:"primary_key" json:"id"`
    Name string `json:"name"`
    ArticleId int
    ...
}

當(dāng)然,也可以用注釋指定X列配X列:

Specify Foreign Key & Association Key

type Profile struct {
  gorm.Model
  Name   string
  UserID uint
}

type User struct {
  gorm.Model
  Refer   uint
  Profiles []Profile `gorm:"ForeignKey:UserID;AssociationForeignKey:Refer"`
}

包括gorm.Model在內(nèi),一股濃濃的laravel風(fēng)格。

另外似乎你的article定義也有問題。

一對多情況下:

type Article struct {
    ID int `gorm:"primary_key" json:"id"`
    Tags   []Tag `json:"tags"`
    ...
}
2018年6月30日 21:09