//使用實例: article:=new(Article) num,err:= o.QueryTable("go_article").RelatedSel().All(&article)
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
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
4.1 RelatedSel()能夠選擇「字段名」 RelatedSel("user") 其實只是選擇「表名」(實際也不是表名,而是 struct 中對應字段的小寫),只有當一個 model 中使用了多個 rel 字段的時候纔有意義。但怎麼選擇關聯的 user 表中的指定字段?數據庫
4.2 RelatedSel()默認應該是 inner join,但我但願是 left join ,應該怎麼寫?mvc
4.3 我想看到每次執行數據庫操做時使用的 sql 語句,怎麼查看?框架
我的以爲 beego 自帶的 orm 其實挺很差用的,有些概念也很不理解。 做爲一個常常寫 ThinkPHP 3.2 的碼農,使用其它框架的 orm 的時候真的以爲太麻煩。 但話說 orm 到底有什麼優點?其實我是一直不理解的,tp3.2 操做數據庫的方法真正好用的不是它的 orm,而是它的連貫操做寫起來真的很舒服。函數
其實 beego 的做者也作過一個獨立的 orm 用法和 tp3.2 也仍是有點像的。ui
但 github 中能搜到了 star 最多的 go orm 應該是 gorm ,看文檔,發現它的用法其實與 tp3.2 的挺像的,我仍是比較推薦使用 gorm 的。命令行