🙌

gormでのasscociationとpreloadの違い

に公開

Preload vs Association vs Joins

1. Preload (Eager Loading)

// N+1問題を解決するが、複数のクエリを実行
db.Preload("Category").Preload("Author").Find(&articles)
// 実行されるSQL:
// SELECT * FROM article
// SELECT * FROM category WHERE id IN (...)
// SELECT * FROM consumer_user WHERE id IN (...)
  • メリット: 設定が簡単、関連データを自動でマッピング
  • デメリット: 複数クエリが実行される、WHERE条件が関連テーブルに適用できない

2. Association

// 関連データの操作専用
db.Model(&article).Association("Category").Find(&category)
  • 用途: 既存レコードの関連を追加/削除/更新する時
  • デメリット: 検索には不向き

Discussion