2

データベース内のレコードにアクセスするためにGORMを使用しています。ここで、削除されていないすべてのレコードを取得したいと考えています。つまり、属性 DeletedAt は NULL でなければなりません。

で次のコマンド チェーンを試しましたWHERE()が、結果が返されませんでした。

users := []*models.User{}
db.Where("deleted_at", nil).Find(&users)

db.Where("deleted_at", "NULL").Find(&users)

私のデータベースモデルは、次の構造体によって定義されています。

type Model struct {
    ID        uint `gorm:"primary_key"`
    CreatedAt time.Time
    UpdatedAt time.Time
    DeletedAt *time.Time
}

type User struct {
    gorm.Model
    Username string `sql:"size:32; not null; unique"`
    Password string `sql:"not null"`
    Locale   string `sql:"not null"`
}
4

1 に答える 1

3

すべての RDBMS で、SQL 標準は、NULL 値との比較を含む条件が常に false であることを義務付けています。したがって、次のクエリは常に空の結果を返します。

select * from XXX where deleted_at = NULL

NULL 値を検索する場合は、次のように記述します。

select * from XXX where deleted_at is null

GORM が正しいクエリを生成することを確認することで、問題を解決できると思います。たとえば、これは機能するはずです(テストされていません):

db.Where("deleted_at is null").Find(&users)
于 2015-05-14T12:31:29.530 に答える