前回
リポジトリの使用
今度は、リポジトリを使用するようにしてみます。
src/index.ts
import { AppDataSource } from "./data-source"; import { Photo } from "./entity/Photo"; AppDataSource.initialize() .then(() => { console.log("start..."); const photoRepository = AppDataSource.getRepository(Photo); const photo = new Photo(); photo.name = "my photo"; photo.description = "my description"; photo.filename = "photo.jpg"; photo.views = 1; photo.isPublished = true; photoRepository.save(photo).then(() => { photoRepository.find().then((savedPhotos) => { console.log("savedPhotos: ", savedPhotos); }); }); }) .catch((error) => { console.log(error); });
実行してみます。
start... query: START TRANSACTION query: INSERT INTO `photo`(`id`, `name`, `description`, `filename`, `views`, `isPublished`) VALUES (DEFAULT, ?, ?, ?, ?, ?) -- PARAMETERS: ["my photo","my description","photo.jpg",1,1] query: COMMIT query: SELECT `Photo`.`id` AS `Photo_id`, `Photo`.`name` AS `Photo_name`, `Photo`.`description` AS `Photo_description`, `Photo`.`filename` AS `Photo_filename`, `Photo`.`views` AS `Photo_views`, `Photo`.`isPublished` AS `Photo_isPublished` FROM `photo` `Photo` savedPhotos: [ Photo { id: 1, name: 'my photo', description: 'my description', filename: 'photo.jpg', views: 1, isPublished: true }, Photo { id: 2, name: 'my photo', description: 'my description', filename: 'photo.jpg', views: 1, isPublished: true }, Photo { id: 3, name: 'my photo', description: 'my description', filename: 'photo.jpg', views: 1, isPublished: true } ]
色々とテストで実行していたので、データが複数入っていますが、結果が取れています。
EntityManagerに比べて、単一のデータベースを扱うことができます。
リポジトリの他の使い方
他の記法も試してみます。
src/index.ts
import { AppDataSource } from "./data-source"; import { Photo } from "./entity/Photo"; AppDataSource.initialize() .then(async () => { console.log("start..."); const photoRepository = AppDataSource.getRepository(Photo); const allPhotos = await photoRepository.find(); console.log("allPhotos: ", allPhotos); const firstPhoto = await photoRepository.findOneBy({ id: 1 }); console.log("firstPhoto: ", firstPhoto); const myPhotoPhoto = await photoRepository.findOneBy({ name: "my photo" }); console.log("myPhotoPhoto: ", myPhotoPhoto); const allViewedPhotos = await photoRepository.findBy({ views: 1 }); console.log("allViewedPhotos: ", allViewedPhotos); const allPublishedPhotos = await photoRepository.findBy({ isPublished: true, }); console.log("allPublishedPhotos: ", allPublishedPhotos); const [photos, photosCount] = await photoRepository.findAndCount(); console.log("photos: ", photos); console.log("photosCount: ", photosCount); }) .catch((error) => { console.log(error); });
まとめ
ここまでで、
- リポジトリの使用について
- リポジトリの他の使い方について
を学びました。
次回はphotoの更新を掘り下げようと思います。
コード
今回のコードは、以下に格納しました。