'Prisma Client: Update record field with value from related table

I am trying to update a MySQL record using the Prisma Client (v.3.10.0), setting a field value using a lookup from a related table. Following is the raw query I would use, which works fine, of course:

UPDATE users
SET client_contract_id = (
  SELECT cc.id
  FROM client_contract cc
  JOIN client c on c.id = cc.client_id
    WHERE c.salesforce_id = '[...]' AND
          CURRENT_DATE BETWEEN cc.start_date AND cc.end_date
    )
WHERE auth0_user_id = 'xxxxx';

There related schemas are:

model client_contract {
  id                     Int       @id @default(autoincrement())
  client_id              Int?      @db.UnsignedInt
  salesforce_account_id  String    @db.VarChar(48)
  salesforce_contract_id String?   @db.VarChar(48)
  start_date             DateTime? @db.Date
  end_date               DateTime? @db.Date
  entitlements           Int?      @default(0) @db.TinyInt
  creation_date          DateTime? @default(now()) @db.Timestamp(0)
  created_by             Bytes?    @db.Binary(16)
  client                 client?   @relation(fields: [client_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "client_contract_client_id_fk")
  users                  users[]

  @@unique([salesforce_account_id, salesforce_contract_id], map: "client_contract_sf_account_id_sf_contract_id_uindex")
  @@index([client_id], map: "client_contract_client_id_fk")
}

model client {
  id                      Int                   @id @default(autoincrement()) @db.UnsignedInt
  name                    String                @db.VarChar(255)
  abbreviation            String?               @db.VarChar(255)
  state                   String?               @db.VarChar(255)
  banner_image            String?               @db.VarChar(255)
  address                 String?               @db.VarChar(255)
  city                    String?               @db.VarChar(255)
  zip                     String?               @db.VarChar(255)
  website                 String?               @db.VarChar(255)
  corner_image            String?               @db.VarChar(255)
  type                    Int                   @default(0) @db.UnsignedTinyInt
  parent_client_id        Int?                  @db.UnsignedInt
  is_international        Int                   @default(0) @db.UnsignedTinyInt
  creation_date           DateTime              @default(now()) @db.Timestamp(0)
  created_by_user_id      Bytes?                @db.Binary(16)
  category                String?               @db.VarChar(255)
  system_name             String                @db.VarChar(255)
  fiscal_year_start_month Int?                  @db.TinyInt
  salesforce_id           String?               @unique(map: "client_salesforce_id_uindex") @db.VarChar(24)
  annual_revenue_millions Int?                  @db.UnsignedInt
  industry                String?               @db.VarChar(128)
  sub_industry            String?               @db.VarChar(128)
  client_contract         client_contract[]
  client_email_domain     client_email_domain[]
  contract                contract[]
  delta_tag               delta_tag[]
  users                   users[]

  @@index([name], map: "name_2")
}

How would I construct a similar call with the Prisma Client?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source