Golang

Golang gormから取得した空オブジェクト, 空Collectionの判定。Collectionからオブジェクトの抽出

Golang

空のオブジェクトの判定

これで判定

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 {
	// 		
}

 

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)