#typeorm
Вопрос:
Есть ли элегантный способ объединить эти два оператора в один, похожий на обычный SQL INSERT INTO t1 SELECT 'something', t2.x FROM t2 WHERE ...
?:
const commentIds: Array<Pick<SectionComment, 'id'>> =
await this.articleRepository
.createQueryBuilder('article')
.select('sectionComment.id', 'id')
.innerJoin('article.sectionComments', 'sectionComment')
.where(
'article.vaultId = :vaultId and article.valueId = :valueId and sectionComment.userId = :userId',
{
valueId,
vaultId,
userId,
}
)
.getRawMany();
if (commentIds.length) {
await this.userSectionReadRepository
.createQueryBuilder()
.insert()
.into(UserSectionRead)
.values(
commentIds.map((sectionComment) => ({
userId,
commentId: sectionComment.id,
}))
)
.orIgnore()
.execute();
}
Проблема values()
в том, что метод in InsertQueryBuilder
не принимает функцию подзапроса (qb: this) => string
, как where()
это делает метод.