使用 cascades 自动保存相关对象

我们可以在关系中设置cascade选项,这是就可以在保存其他对象的同时保存相关对象。让我们更改一下的 photo 的@OneToOne装饰器:

  1. export class Photo {
  2. /// ... other columns
  3. @OneToOne(type => PhotoMetadata, metadata => metadata.photo, {
  4. cascade: true
  5. })
  6. metadata: PhotoMetadata;
  7. }

使用cascade允许就不需要边存 photo 边存元数据对象。我们可以简单地保存一个 photo 对象,由于使用了 cascade,metadata 也将自动保存。

  1. createConnection(options)
  2. .then(async connection => {
  3. // 创建 photo 对象
  4. let photo = new Photo();
  5. photo.name = "Me and Bears";
  6. photo.description = "I am near polar bears";
  7. photo.filename = "photo-with-bears.jpg";
  8. photo.isPublished = true;
  9. // 创建 photo metadata 对象
  10. let metadata = new PhotoMetadata();
  11. metadata.height = 640;
  12. metadata.width = 480;
  13. metadata.compressed = true;
  14. metadata.comment = "cybershoot";
  15. metadata.orientation = "portait";
  16. photo.metadata = metadata; // this way we connect them
  17. // 获取 repository
  18. let photoRepository = connection.getRepository(Photo);
  19. // 保存photo的同时保存metadata
  20. await photoRepository.save(photo);
  21. console.log("Photo is saved, photo metadata is saved too.");
  22. })
  23. .catch(error => console.log(error));