beego 中使用關聯查詢( join 查詢)

beego 中使用關聯查詢( join 查詢)

  1. 文檔所在網址:這裏
//使用實例:
article:=new(Article)
num,err:= o.QueryTable("go_article").RelatedSel().All(&article)
  1. 但直接使用 RelatedSel() 是不行,還必須先在 model中定義:
type User struct {
    Id int
    Name string
    Age int
}
type Article stuct {
    Id int
    Title string
    Content string
    User *User `orm:"rel(fk)"` //這樣寫,默認在Article中應該有一個user_id的字段,若是沒有,經過beego自動建表的話,它會生成;若是是手動建表,記得把user_id 這個字段加上去
}

定義表字段爲"rel(fk)",即外鍵,要定義其它類型的,請看文檔。git

  1. 命令行自動建表:
orm.RunCommand()  //main函數或init函數中須要加這行代碼,不然不能自動建表
go build main.go #先在命令行中執行這句,會生成main.exe文件

./main orm syncdb -h #-h會提示可用的參數

./main orm syncdb -v #建表的同時會顯示建表的sql語句

若是使用自動建表,建議不要像上邊同樣直接寫int,string,具體字段字段的方法,見 文檔github

其實我使用命令行建表最主要的目的是想知道 Article 中的 User 會生成什麼字段名,結果就是 user_id,且與你 User 對應表名的前綴沒有關係sql

  1. 疑問:

4.1 RelatedSel()能夠選擇「字段名」 RelatedSel("user") 其實只是選擇「表名」(實際也不是表名,而是 struct 中對應字段的小寫),只有當一個 model 中使用了多個 rel 字段的時候纔有意義。但怎麼選擇關聯的 user 表中的指定字段?數據庫

4.2 RelatedSel()默認應該是 inner join,但我但願是 left join ,應該怎麼寫?mvc

4.3 我想看到每次執行數據庫操做時使用的 sql 語句,怎麼查看?框架

  1. 一點感慨:

我的以爲 beego 自帶的 orm 其實挺很差用的,有些概念也很不理解。 做爲一個常常寫 ThinkPHP 3.2 的碼農,使用其它框架的 orm 的時候真的以爲太麻煩。 但話說 orm 到底有什麼優點?其實我是一直不理解的,tp3.2 操做數據庫的方法真正好用的不是它的 orm,而是它的連貫操做寫起來真的很舒服。函數

其實 beego 的做者也作過一個獨立的 orm 用法和 tp3.2 也仍是有點像的。ui

但 github 中能搜到了 star 最多的 go orm 應該是 gorm ,看文檔,發現它的用法其實與 tp3.2 的挺像的,我仍是比較推薦使用 gorm 的。命令行

相關文章
相關標籤/搜索