主キーとしての ID
GORMはデフォルトで、テーブルの主キーとして ID という名前のフィールドを使用します。
type User struct { |
他のフィールドを primaryKey タグで主キーとして設定できます
// Set field `UUID` as primary field |
Composite Primary Key も参照してください。
複数形のテーブル名
GORMは構造体名をテーブル名としてsnake_casesのように複数形にします。構造体 User の場合、対応するテーブル名は規約により users となります。
テーブル名
Tabler インターフェイスを実装することで、デフォルトのテーブル名を変更することができます。例:
type Tabler interface { |
注意 メソッドの戻り値はキャッシュされるため、
TableNameは動的な名前を許可していません。動的にテーブル名を変更するには、Scopesで解決することができます。例:
func UserTable(user User) func (tx *gorm.DB) *gorm.DB { |
一時的に名前を指定する
Tableメソッドで一時的にテーブル名を指定できます。例:
// Create table `deleted_users` with struct User's fields |
FROM句でサブクエリを使用する方法については、 From 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
カラム名
規約に従い、データベースのカラム名はフィールド名のsnake_caseを使用します。
type User struct { |
column タグか NamingStrategy を利用することでカラム名を上書きできます。
type Animal struct { |
タイムスタンプのトラッキング
CreatedAt
CreatedAtフィールドを持つモデルの場合、フィールドの値がゼロ値であれば、レコード作成時に現在時刻が設定されます。
db.Create(&user) // set `CreatedAt` to current time |
autoCreateTime タグを falseに設定すると、タイムスタンプのトラッキングを無効にできます。例:
type User struct { |
UpdatedAt
UpdatedAtフィールドを持つモデルの場合、フィールドの値がゼロ値であれば、レコードの更新時または作成時に現在時刻が設定されます。
db.Save(&user) // set `UpdatedAt` to current time |
autoUpdateTime タグを falseに設定すると、タイムスタンプのトラッキングを無効にできます。例:
type User struct { |
注意 GORMでは、複数のタイムトラッキング用のフィールドを定義することや、UNIX(ナノ/ミリ)秒でタイムトラッキングすることが可能です。詳細については Models をチェックしてください。