Gorm: مشكلة متعلقة بـ Find () و First ()

تم إنشاؤها على ٢٢ نوفمبر ٢٠١٤  ·  3تعليقات  ·  مصدر: go-gorm/gorm

لست متأكدًا مما إذا كانت هذه المشكلة تتعلق بالرمز أو الوثائق الخاصة بك.
أفترض أيضًا أنك صممت GORM بناءً على Ruby On Rails أو PHP-Laravel ولهذا أعتقد أن هناك خطأً.

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

لا أتوقع موافقتك على جميع اقتراحاتي لأن محاولتك جعل Find () و First () ينجزان الأوامر الأربعة في Laravel: All () ، First () ، Find () ، Get ().

لكن الجانب السلبي هو أن طريقتك دائمًا تعيد الشريحة حتى لو كان من الأنسب الحصول على هيكل واحد (بدون شريحة) عندما تريد وتتوقع نتيجة واحدة.

التعليق الأكثر فائدة

مرحبا 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 كومينتر

اكتب هيكل العميل {
المعرّف 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: = [] العميل {}
u: = & الزبون {}

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

}

هذه هي المشكلة:

الأمر الأول:
يجب أن يؤدي هذا إلى إرجاع النتيجة الأولى من مجموعة جميع النتائج التي يتم إرجاعها. (سواء كانت هناك معلمات WHERE إضافية أم لا).
يجب أن تحلل نتيجة ONE إلى & Customer {} ولا تحتوي على مصفوفة بها نتيجة واحدة.

لا يعمل حاليًا عندما لا تكون & u إشارة إلى شريحة. & u يجب أن تشير إلى & Customer {} وليس & [] Customer {}.

يجب ألا تقبل هذه الوظيفة أبدًا معلمة إضافية للمفتاح الأساسي. هذا هو الغرض من وظيفة FIND.

البحث عن الأمر:
عندما يُعطى الأمر "بحث" مفتاحًا أساسيًا ، لا يجب أن يُرجع شريحة. يجب أيضًا أن تتوقع دائمًا قيمة مفتاح أساسي.

إذا كنت تريد كل القيم ، فاستخدم الأمر "ALL". db.ALL (& u) where & u = [] العميل {}

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

كل الأمر:
يجب تضمين هذا في مكتبتك. هذا من شأنه أن يعيد كل القيم.

db.All (& u) ، حيث & u = [] العميل {}

احصل على الأمر:
يجب تضمين هذا في مكتبتك. سيؤدي هذا إلى إرجاع صفيف من جميع القيم بما في ذلك بعد وضع قيود WHERE على.

مرحبا 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 التقييمات