🙌
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