如何从 Prisma 中的 MySql 关系表中获取数据

Posted

技术标签:

【中文标题】如何从 Prisma 中的 MySql 关系表中获取数据【英文标题】:How to get data from MySql relation table in Prisma 【发布时间】:2018-10-30 21:52:10 【问题描述】:

在datamodel.graphql中

type Ride 
 rideId: String
 productId: String
 passenger: Passenger
 origin: Origin
 destination: Destination
 dateTime: DateTime
 feedback: String



type Passenger 
 id: ID! @unique
 firstName: String
 lastName: String


type Destination 
 # The unique ID of the destination.
 id: ID! @unique
 latitude: Float
 longitude: Float
 address: String


type Origin 
 id: ID! @unique
 latitude: Float
 longitude: Float
 address: String



type Report 

 productId: String
 passenger: Passenger
 description: String

我部署了这个数据模型并生成了一个 mysql Db、自动查询、突变。

它在 MySql 中创建一个“Ride”、“Passenger”、“Report”和“Origin”表。但它没有在“Ride”表中为乘客、出发地、目的地创建任何列。

它为此创建一个关系表,如_PassengerToRide、_OriginToRide 和_DestinationToRide。

“Ride”表中缺少关系建立,当我查询“rides()”时,我无法从乘客、起点和目的地表中获取详细信息。这是定义datamodel.graphql的正确方法吗? (已编辑)

【问题讨论】:

【参考方案1】:

根据您的描述,此查询应该“正常工作”:

query 
  rides 
    feedback
    passenger 
      id
    
    origin 
      id
    
    destination 
      id
    
  

Prisma 使用您提到的关系表方法来跟踪两个节点之间的关系,例如表 _OriginToRide 与数据模型中的关系 @relation(name: "OriginToRide") 相关。

您无需在 SQL 级别更改任何内容即可在之后连接关系。

注意:以上适用于具有已激活迁移的 Prisma 数据库连接器。如果您的连接器不进行迁移,则支持表示关系的不同方法。支持这一点的相应数据模型可以由introspecting您现有的数据库模式生成。

【讨论】:

如果你的连接表没有下划线命名怎么办?

以上是关于如何从 Prisma 中的 MySql 关系表中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

从 Prisma 中的多对多表中获取元信息

Prisma 可以从关系表中创建一对多关系吗?

NestJS-Prisma 如何使用关系字段创建记录?

如何在 MySQL 中实现 schema.prisma @reference(fields:...)?

Prisma 模式 - 从多个可能的外键(或关系)创建关系字段

如何使用 JDBC/Java 访问和显示 MySQL 关系数据库中的特定记录?