Gorm: Find()とFirst()の問題

作成日 2014年11月22日  ·  3コメント  ·  ソース: go-gorm/gorm

この問題がコードにあるのかドキュメントにあるのかわかりません。
また、Ruby On RailsまたはPHP-Laravelに基づいてGORMを設計したと思います。そのため、間違いがあると思います。

http://laravel.com/docs/4.2/eloquent

Find()とFirst()を作成しようとすると、Laravelの4つのコマンドAll()、First()、Find()、Get()が実行されるため、私の提案すべてに同意することは期待できません。

ただし、欠点は、1つの結果が必要な場合に、1つの構造体(スライスなし)を取得する方が便利な場合でも、メソッドが常にスライスを返すことです。

最も参考になるコメント

こんにちは@pjebs

私はActiveRecordからアイデアを盗みましたが、それはそれとまったく同じようには機能しませんが、以下のように機能します。

db.First(&User{})   // first user, sort by primary key
db.First(&[]User{}) // find the first user, and put it into the array

db.Find(&User{})   // first user
db.Find(&[]User{}) // find all users

// find records with conditions
db.First(&User{}, 123)
db.First(&User{}, "name = ?", "hello")
db.Find(&User{}, "name = ?", "hello")
db.Where("name = ?", "hello").First(&User{})
db.Where("name = ?", "hello").Find(&User{})

全てのコメント3件

タイプCustomerstruct {
Id uint32 gorm:"column:id; primary_key:yes"
Access_token文字列gorm:"column:access_token"
}

func(c Customer)TableName()文字列{
「顧客」を返す
}

func MyMiddleware(rw http.ResponseWriter、r * http.Request){
// u:= [] Customer {}
u:=&Customer {}

db, _ := gorm.Open("mysql", "root:@/main")
// db.First(&u, 5)
// db.First(&u)
// db.Find(&u, 5)
db.Find(&u)

}

これが問題です:

最初のコマンド:
これにより、返されるすべての結果のコレクションから最初の結果が返されます。 (追加のWHEREパラメーターがあるかどうか)。
1つの結果を&Customer {}に解析し、そこに1つの結果を含む配列を含めないでください。

現在、&uがスライスへの参照でない場合は機能しません。 &uは、&[] Customer {}ではなく&Customer {}を指す必要があります。

この関数は、主キーの追加パラメーターを決して受け入れないようにする必要があります。 それがFIND関数の目的です。

コマンドを見つける:
検索コマンドに主キーが指定されている場合、スライスを返すことはできません。 また、常に主キー値を期待する必要があります。

すべての値が必要な場合は、「ALL」コマンドを使用してください。 db.ALL(&u)ここで、&u = [] Customer {}

http://daylerees.com/codebright/eloquent-queries
http://laravel.com/docs/4.2/queries

すべてのコマンド:
これはライブラリに含まれている必要があります。 それはすべての値を返します。

db.All(&u)、ここで&u = [] Customer {}

コマンドを取得する:
これはライブラリに含まれている必要があります。 これにより、WHERE制約を設定した後も含め、すべての値のARRAYが返されます。

こんにちは@pjebs

私はActiveRecordからアイデアを盗みましたが、それはそれとまったく同じようには機能しませんが、以下のように機能します。

db.First(&User{})   // first user, sort by primary key
db.First(&[]User{}) // find the first user, and put it into the array

db.Find(&User{})   // first user
db.Find(&[]User{}) // find all users

// find records with conditions
db.First(&User{}, 123)
db.First(&User{}, "name = ?", "hello")
db.Find(&User{}, "name = ?", "hello")
db.Where("name = ?", "hello").First(&User{})
db.Where("name = ?", "hello").Find(&User{})
このページは役に立ちましたか?
0 / 5 - 0 評価