Bobでの「単純な検索」:SQL/ActiveRecord比較
code:go
// sql
SELECT * FROM master_books WHERE title ILIKE '%検索語%'
// ActiveRecord
MasterBook.where("title ILIKE ?", "%検索語%")
// bob
books, err := dbmodels.MasterBooks.Query(
dbmodels.SelectWhere.MasterBooks.Title.ILike("%検索語%"),
).All(ctx, db)
MasterBooks.Query(...)で検索条件、.All()で全件取得。
リレーション(関連テーブルを使う)
例)本(master_books)→著者(authors)リレーションを取得
code:go
// sql
SELECT * FROM master_books JOIN authors ON authors.id = master_books.author_id
WHERE authors.name = '村上春樹'
// ActiveRecord
MasterBook.joins(:author).where(authors: { name: "村上春樹" })
// bob
ctx := context.Background()
// sm.Joinを使う形
books, err := dbmodels.MasterBooks.Query(
sm.Join("authors ON authors.id = master_books.author_id"),
sm.Where("authors.name = ?", "村上春樹"),
).All(ctx, db)
// smはStruct Modifiers(SQL構文の各節=JOIN/WHE/SELECTなどの修飾子)を組み立てるための便利関数群がまとめられています。
// 自動生成JOINメソッドを使う形
books, err := dbmodels.MasterBooks.Query(
dbmodels.SelectJoins.MasterBooks.Author.InnerJoin,
sm.Where("authors.name = ?", "村上春樹"),
).All(ctx, db)
sm
sm==「SQL修飾子を作る便利パッケージ」
公式自動生成コードでもフル活用されています
JOIN/WHERE/ORDERBY/SELECT(Columns)…など、SQL操作が本当に楽になります