我有两个表:Painting 和 Exhibit,表为 Painting 和 Exhibit,其多对多关系由 Exhibition_paintings 表处理 - id、paintingId、exhibitId。
因为绘画可以有一个展览独有的价格,所以我想在 Exhibition_painting 表中使用一个额外的字段 - Exhibitionpaintingprice。如何在 nextjs 页面上访问该字段?
我应该如何更改这个原本成功的代码?
这两条线将产生一个画作集,没有展览画作价格。
const exhibitRepository = AppDataSource.getRepository(Exhibit);
const exhibit = await exhibitRepository.findOne({
where: { id: exhibitid },
relations: ["gallery", "paintings"],
});
return exhibit;
}
映射集合的表体:
<>
{exhibit.paintings ? (
exhibit.paintings.map((painting) => {
const exhibitpainting = painting.exhibitRelations;
return (
<tr key={painting.id}>
<td>{painting.id}</td>
<td>
<Image
src={painting.picture}
alt={painting.title}
width={100}
height={100}
/>
</td>
<td>
<Link href={`/painting?id=${painting.id}`}>
{painting.title}
</Link>
</td>
<td>{painting.description}</td>
<td>Exhibit note</td>
<td>{painting.media}</td>
<td>
{painting.height}h x {painting.width}w x .5d
</td>
<td>{painting.price}</td>
**<td>ExhibitPaintingPrice: {??????????????}</td>**
</tr>
);
})
) : (
<tr>
<td colSpan={7}>No paintings</td>
</tr>
)}
</>
我试过了
<td>
{painting.exhibitRelations?.exhibitpaintingprice}
</td>
生成此错误: - 错误 TypeError:无法读取未定义的属性(读取“joinColumns”)
您必须自己创建一个单独的表,而不是依赖 TypeORM 提供的连接表。
创建另一个实体
ExhibitPaintings
并为每个 id 添加两个主列。然后向每个表添加 ManyToOne 装饰器,并将连接列指定为您刚刚创建的主列。
然后你的多对多表就准备好了。现在,您可以向此表添加任何自定义列,并且可以使用 QuerySelector 或仅通过 EntityManager 进行查询。
这是 GitHub 讨论,希望对您有所帮助。 https://github.com/typeorm/typeorm/issues/2402