質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

0回答

1765閲覧

DBから値が取り出せない(go言語,revel, gormを使用)

Akiposs

総合スコア12

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2019/07/04 03:00

前提・実現したいこと

Go言語でrevelフレームワーク、Gormを使い、ミニ掲示板のようなものを作っています。
Html内のformで入力したものがDBに保存されるところまで行ったのですが、DBから取り出すことが出来ない状況です。
極端な話Gormのドキュメントをそのままコピーしてテストするもうまくいきません。
何か勘違いしているところがあるのだと思います。宜しければご指導のほどお願い致します。

データ保存の際出る表示

INFO 11:53:18 app value.go:308: タイトルカラムです section=system INFO 11:53:18 app value.go:308: コンテンツカラムです section=system INFO 11:53:18 app value.go:308: yamato section=system INFO 11:53:18 app value.go:308: これから代入していきます section=system INFO 11:53:18 app value.go:308: 生成しました section=system INFO 11:53:18 app value.go:308: &{{{0 0} 0 0 0 0} 0xc000142000 <nil> 1 0xc000542000 false 0 {0xc0002864b0} 0xc0004e11e0 {{0 0} {{map[gorm:order_by_primary_key:0xc0000b25a8] false}} map[] 0} 0xc0003a1790 <nil> 0xc000295320 false <nil>} section=system INFO 11:53:18 app value.go:308: これからリダイレクトします section=system

該当のソースコード

Struct

1package models 2 3import ( 4 "github.com/jinzhu/gorm" 5) 6 7type App struct { 8 gorm.Model 9 Title string `gorm:"column:title"` 10 Contents string `gorm:"column:contents"` 11 Nickname string `gorm:"column:nickname"` 12}

DB

1package models 2 3import ( 4 "github.com/jinzhu/gorm" 5 _ "github.com/jinzhu/gorm/dialects/mysql" 6) 7 8func Mysql() *gorm.DB { 9 DBMS := "mysql" 10 USER := "superakip" 11 PASS := "akihiro2sei" 12 DBNAME := "go_db" 13 LOGOS := "charset=utf8&parseTime=True&loc=Local" 14 15 CONNECT := USER + ":" + PASS + "@/" + DBNAME + "?" + LOGOS 16 db, err := gorm.Open(DBMS, CONNECT) 17 if err != nil { 18 panic("データベースへの接続に失敗しました") 19 } 20 21 // スキーマのマイグレーション 22 db.AutoMigrate(&User{}) 23 db.AutoMigrate(&App{}) 24 return db 25}

FormHtml

1 <form class="col s12" action="/Create" method="POST"> 2 <div class="row"> 3 <div class="input-field col s6"> 4 <input id="input_text" type="text" name="Nickname" data-length="10"> 5 <label for="input_text">Nickname</label> 6 </div> 7 </div> 8 <div class="row"> 9 <div class="input-field col s6"> 10 <input id="input_text" type="text" name="Title" data-length="10"> 11 <label for="input_text">Title</label> 12 </div> 13 </div> 14 <div class="row"> 15 <div class="input-field col s12"> 16 <textarea id="textarea1" class="materialize-textarea" name="Contents" data-length="400"></textarea> 17 <label for="textarea1">Contents</label> 18 </div> 19 </div> 20 <input type="submit" value="投稿する"> 21 </form>

Create

1package controllers 2 3import ( 4 "app/app/models" 5 "log" 6 7 "github.com/revel/revel" 8) 9 10type App struct { 11 *revel.Controller 12} 13 14func (c App) Index() revel.Result { 15 //自動マイグレート 16 models.Mysql() 17 return c.Render() 18} 19 20func (c App) CreatePage() revel.Result { 21 return c.Render() 22} 23 24func (c App) Create() revel.Result { 25 //Formからパラメータゲット 26 title := c.Params.Form.Get("Title") 27 contents := c.Params.Form.Get("Contents") 28 nickname := c.Params.Form.Get("Nickname") 29 log.Println(title) //タイトルカラムです(formで入力した値) 30 log.Println(contents) //コンテンツカラムです(formで入力した値) 31 log.Println(nickname) //yamato(formで入力した値) 32 log.Println("これから代入していきます") 33 // //modelsパッケージのUser構造体(value:なし)に代入してく 34 AppIst := models.App{} 35 AppIst.Title = title 36 AppIst.Contents = contents 37 AppIst.Nickname = nickname 38 //gormでやってる 39 models.Mysql().Create(&AppIst) 40 log.Println("生成しました") 41 a := models.Mysql().First(&AppIst) 42 log.Println(a) 43 44 log.Println("これからリダイレクトします") 45 return c.Redirect(App.Index) 46}

試したこと

formからデータを飛ばす過程で失敗しているのかもと思い、

models.Mysql().Create(&App{Title: "~~~", Contents="~~~~", Nickname="~~~"}

のように最初から値が入っている状態で生成もしてみたのですが、nilになってしまいました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoorwm

2019/07/04 03:14

取り出す所を書いてください
Akiposs

2019/07/04 03:33

失礼致しました。 Createというコードの a := models.Mysql().First(&AppIst) log.Println(a) の部分がそれを指しているつもりなのですが、そもそもそれがDBから取り出すという意味になっていませんか?汗
yoorwm

2019/07/04 05:32

おっと。そこでしたか。と言う事はログのここら辺で INFO 11:53:18 app value.go:308: &{{{0 0} 0 0 0 0} 0xc000142000 ~ 取り出した内容という事なら、AppIstの方に入っているのではないですか?
Akiposs

2019/07/04 05:48

すいません知識不足もあり質問の意図がよくわからないのですが、 DBに保存されているのではないか?という意味でしょうか  DBへのレコード保存はされています。
calkinos

2019/07/07 04:40

a := DB.First(&AppIst) この行で、データはAppIstに入ります、 a に入るのはgorm.DBです。 b := models.App{} models.Mysql().First(&b) log.Println(b) でなかみをみてみましょう https://godoc.org/github.com/jinzhu/gorm#DB.First func (s *DB) First(out interface{}, where ...interface{}) *DB
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問