7
2

More than 3 years have passed since last update.

【TypeORM】INSERTで覚えておきたい4つのやり方(と外部キーの指定方法)

Last updated at Posted at 2020-06-19

環境

はじめに(外部キーの指定方法)

author has_many books という関連があった時に、新たに book レコードを作りたいと仮定します。
普通にエンティティを書いただけでは、外部キー(Bookエンティティの authorId)は、データベースには生成されますが、エンティティファイルには現れません。

後述する何れの場合も、このカラムに直接アクセスしたい場合は、エンティティに追加する必要があります。

// (1) このカラムを追加します
@Column()
authorId!: number

@Index()
@ManyToOne(() => Book, (author) => author.books)
// (2) この @JoinColumn を追加します
@JoinColumn({ name: 'authorId' })
author!: Author

ドキュメント: https://typeorm.io/#/relations-faq/how-to-use-relation-id-without-joining-relation

尚、これでは定義が重複してしまうので、「authorId だけ定義して、 リレーション(この場合は author)を定義しなくて良い方法はありますか?」という質問がありますが、どうやらなさそうです。
https://github.com/typeorm/typeorm/issues/4569

saveに直接objectを渡す

await this.bookRepo.save({
  title,
  pages: 300,
  authorId: 1,
})

new を使う

const book = new Book()
book.title = title
book.pages = 300
book.authorId = 1

await this.bookRepo.save(book)

create を使う

const book = this.bookRepo.create({
  title,
  pages: 300,
  authorId: 1,
})

await this.bookRepo.save(book)

createQueryBuilder を使う

this.booktRepo.createQueryBuilder()
  .insert()
  .into(Book)
  .values([
    { title },
    { pages: 300 },
    { authorId: 1 },
  ])
  .execute()

ドキュメント: https://orkhan.gitbook.io/typeorm/docs/insert-query-builder

7
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
7
2