LoginSignup
6
2

More than 3 years have passed since last update.

TypeORMで外部キーでJOINしたテーブルのカラムでWHERE条件を指定する

Posted at
SELECT * FROM parents
INNER JOIN children ON parents.foreign_key = children.id
WHERE children.search_column = 'target';

みたいなクエリをいい感じに書きたい。

方法1: Repository#findwhereにクエリビルダを使用する

この方法が書きたかった。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がついに正式版になったので(長かった)、これから始めるならそっちかなあと思ったりもする。一度触ってみたい。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2