もくじ
空のオブジェクトの判定
これで判定
existingTarget := dao.Object{} err := tx.Model(&existingTarget). Where("{条件文}") First(&existingTarget).Error と if errors.Is(err, gorm.ErrRecordNotFound) { // 空オブジェクトの時の処理 }
例
func insertIfNotExistsUserItem(tx *gorm.DB, rowUserItemName string) error { // 既存のレコードを取得 existingTarget := dao.UserItem{} err := tx.Model(&existingTarget). Where("name = ?", rowUserItemName). First(&existingTarget).Error if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { return errors.Wrap(err, "error in insertIfNotExistsUserItem.First") } // 既存のレコードが存在しない場合のみINSERT文を実行 if errors.Is(err, gorm.ErrRecordNotFound) { newDao := dao.UserItem{} err := tx.Session(&gorm.Session{FullSaveAssociations: true}). Clauses(clause.OnConflict{ Columns: []clause.Column{{Name: "id"}}, DoUpdates: clause.AssignmentColumns([]string{"id", "name"}), }).Create(newDao.ToDAOFromCSV(libs.SetULID(), userName)).Error if err != nil { return errors.Wrap(err, "error in insertIfNotExistsUserItem.Create") } } return nil }
空Collectionの判定
Find(&existingTargets).Errorとif len(existingTargets) != 0 {}の組み合わせ
existingTargets := []dao.Object{} err := tx.Model(&existingTargets). Where("条件文"). Find(&existingTargets).Error if err != nil { return errors.Wrap(err, "error in xxxxx.Find") } if len(existingTargets) != 0 { // 空配列の時の処理 }
例
func deleteExistingUserItemByID(tx *gorm.DB, row *csv.UserItem, userItemID value.ID) error { existingTargets := []dao.UserItem{} err := tx.Model(&existingTargets). Where("id = ?", userItemID). Find(&existingTargets).Error if err != nil { return errors.Wrap(err, "error in deleteExistingUserItemByID.Find") } if len(existingTargets) != 0 { // 既にレコードが存在する場合 // user_itemを削除して初期化してからitemsを新規作成 err = recreateUserItems(tx, existingTargets, row, UserItemID) if err != nil { return err } return nil } // レコードがない場合は新規作成 if err := createUserItemsByRow(tx, existingTargets, row, userItemID); err != nil { return err } return nil }
Collectionからのオブジェクト抽出方法
for rangeで抽出できる
for k, v := range ojects { // }
例
for idx, target := range existingTargets { // }