ID
as Primary Key
GORM डिफ़ॉल्ट रूप से table की primary key के रूप में ID
नाम के फ़ील्ड का उपयोग करता है।
type User struct { |
primaryKey
टैग के साथ आप अन्य फ़ील्ड को primary key के रूप में सेट कर सकते हैं
// Set field `UUID` as primary field |
Composite Primary Key भी देखें
Pluralized Table Name
GORM table के नाम के रूप में snake_cases
के रूप में संरचना नाम का pluralizes करता है, संरचना User
के लिए, परंपरा के अनुसार इसका table नाम users
है
TableName
आप Tabler
इंटरफ़ेस लागू करके डिफ़ॉल्ट table नाम बदल सकते हैं, उदाहरण के लिए:
type Tabler interface { |
ध्यान दें
TableName
dynamic नाम की अनुमति नहीं देता है, इसका परिणाम भविष्य के लिए कैश(cached) किया जाएगा, dynamic नाम का उपयोग करने के लिए, आप `Scopes </कोड>, उदाहरण के लिए:
func UserTable(user User) func (tx *gorm.DB) *gorm.DB {
return func (tx *gorm.DB) *gorm.DB {
if user.Admin {
return tx.Table("admin_users")
}
return tx.Table("users")
}
}
db.Scopes(UserTable(user)).Create(&user)
`
Temporarily specify a name
Table
विधि के साथ table का नाम Temporarily रूप से specify करें, उदाहरण के लिए:
// Create table `deleted_users` with struct User's fields
db.Table("deleted_users").AutoMigrate(&User{})
// Query data from another table
var deletedUsers []User
db.Table("deleted_users").Find(&deletedUsers)
// SELECT * FROM deleted_users;
db.Table("deleted_users").Where("name = ?", "jinzhu").Delete(&User{})
// DELETE FROM deleted_users WHERE name = 'jinzhu';
FROM clause में SubQuery का उपयोग कैसे करें, इसके लिए SubQuery से देखें
NamingStrategy
GORM allows users to change the default naming conventions by overriding the default NamingStrategy
, which is used to build TableName
, ColumnName
, JoinTableName
, RelationshipFKName
, CheckerName
, IndexName
, Check out GORM Config for details
Column Name
कॉलम db name convention द्वारा फ़ील्ड के नाम snake_case
का उपयोग करता है।
type User struct {
ID uint // column name is `id`
Name string // column name is `name`
Birthday time.Time // column name is `birthday`
CreatedAt time.Time // column name is `created_at`
}
आप column
टैग के साथ कॉलम नाम को ओवरराइड कर सकते हैं या NamingStrategy
का उपयोग कर सकते हैं
type Animal struct {
AnimalID int64 `gorm:"column:beast_id"` // set name to `beast_id`
Birthday time.Time `gorm:"column:day_of_the_beast"` // set name to `day_of_the_beast`
Age int64 `gorm:"column:age_of_the_beast"` // set name to `age_of_the_beast`
}
Timestamp Tracking
CreatedAt
CreatedAt
फ़ील्ड वाले मॉडल के लिए, फ़ील्ड को वर्तमान समय पर सेट किया जाएगा जब रिकॉर्ड पहली बार बनाया जाता है यदि इसका मान शून्य है
db.Create(&user) // set `CreatedAt` to current time
user2 := User{Name: "jinzhu", CreatedAt: time.Now()}
db.Create(&user2) // user2's `CreatedAt` won't be changed
// To change its value, you could use `Update`
db.Model(&user).Update("CreatedAt", time.Now())
आप autoCreateTime
टैग को false
पर सेट करके टाइमस्टैम्प ट्रैकिंग disable कर सकते हैं, उदाहरण के लिए:
type User struct {
CreatedAt time.Time `gorm:"autoCreateTime:false"`
}
UpdatedAt
UpdatedAt
फ़ील्ड वाले मॉडल के लिए, फ़ील्ड को वर्तमान समय पर सेट किया जाएगा जब रिकॉर्ड अपडेट किया जाता है या बनाया जाता है यदि इसका मान शून्य है
db.Save(&user) // set `UpdatedAt` to current time
db.Model(&user).Update("name", "jinzhu") // will set `UpdatedAt` to current time
db.Model(&user).UpdateColumn("name", "jinzhu") // `UpdatedAt` won't be changed
user2 := User{Name: "jinzhu", UpdatedAt: time.Now()}
db.Create(&user2) // user2's `UpdatedAt` won't be changed when creating
user3 := User{Name: "jinzhu", UpdatedAt: time.Now()}
db.Save(&user3) // user3's `UpdatedAt` will change to current time when updating
आप autoUpdateTime
टैग को false
पर सेट करके टाइमस्टैम्प ट्रैकिंग को disable कर सकते हैं, उदाहरण के लिए:
type User struct {
UpdatedAt time.Time `gorm:"autoUpdateTime:false"`
}
ध्यान दें GORM multiple समय ट्रैकिंग फ़ील्ड का समर्थन करता है और UNIX (नैनो/मिली) सेकंड के साथ ट्रैक करता है, चेकआउट Models अधिक जानकारी के लिए