TypeORMで外部キーでJOINしたテーブルのカラムでWHERE条件を指定する
SELECT * FROM parents
INNER JOIN children ON parents.foreign_key = children.id
WHERE children.search_column = 'target';
みたいなクエリをいい感じに書きたい。
方法1: Repository#find
のwhere
にクエリビルダを使用する
この方法が書きたかった。where
プロパティにオブジェクトリテラルではなく関数を渡すとクエリビルダオブジェクトを受け取れる。
parentRepository.find({
join: { alias: 'parent', innerJoin: { children: 'parent.foreignKey' } },
where: (qb) => {
qb.where('children.searchColumn = :searchColumn', { searchColumn: 'target' });
},
});
参考:
方法2: 素直に最初からクエリビルダを使用する
上の方法を知るまではこう書いていた。
parentRepository.createQueryBuilder('parent')
.innerJoin('parent.foreignKey', 'children')
.where('children.searchColumn = :searchColumn', { searchColumn: 'target' })
.getMany();
まとめ
TypeORMでもクエリビルダを使い始めるとほとんど型の恩恵を受けられないので、find
で一部のユースケースをカバーできるのは地味にうれしい。
そしてやっぱりActiveRecordは便利だと思う。それはそうとPrismaもMigrationがついに正式版になったので(長かった)、これから始めるならそっちかなあと思ったりもする。一度触ってみたい。
Author And Source
この問題について(TypeORMで外部キーでJOINしたテーブルのカラムでWHERE条件を指定する), 我々は、より多くの情報をここで見つけました https://qiita.com/chelproc/items/e46b6f550d1616fd677c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .