Ryan O'Shea
12/06/2021, 1:45 PM? this works with a relation, or in general.
I have a model Issue with a field assignedTo that takes a relation User? as an optional field.
model Issue {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
title String
description String
createdBy User @relation(name: "createdByUser", fields: [createdById], references: [id])
createdById Int
assignedTo User? @relation(name: "assignedTo", fields: [assignedToId], references: [id])
assignedToId Int?
}
However, I can't seem to find a way to write a query to create or update that doesn't demand an Int at assignedTo without the query failing.
For example, the query below won't work unless there is an Int at input.isssue.assignedTo.id .
const newIssue = await db.issue.create({
data: {
title: input.issue.title,
description: input.issue.description,
createdBy: {
connect: {
id: ctx.session.userId,
},
},
assignedTo: {
connect: {
id: Number(input.issue.assignedTo.id),
},
},
},
})
I tried passing in null and undefined directly but both are rejected by the schema.
Or should there be separate create and update queries for optional fields?
if(input.issue.assignedTo.id) { createIssueWithAssignedUser()}
else {createIssue()}Maciek K
12/06/2021, 4:25 PMconst newIssue = await db.issue.create({
data: {
title: input.issue.title,
description: input.issue.description,
createdBy: {
connect: {
id: ctx.session.userId,
},
},
assignedTo: {
set: input.number.issue.assignedTo.id ? [{id: Number(input.number.issue.assignedTo.id}] : []
},
},
})Ryan O'Shea
12/06/2021, 5:34 PMassignedTo: {
connect: { id : assignedTo ?Number(assignedTo.id) : undefined
},
},
So. I'll continue with the workaround.
I think there is a basic pattern for writing queries and handling form data that I am missing. But that's why I am doing this project. To figure this stuff out :)Maciek K
12/06/2021, 6:08 PMset not connect . Anyway try like this:
const newIssue = await db.issue.create({
data: {
title: input.issue.title,
description: input.issue.description,
createdBy: {
connect: {
id: ctx.session.userId,
},
},
(assignedTo.id &&
assignedTo: {
connect: {
id: Number(assignedTo.id)
}
}
)
},
})Ryan O'Shea
12/06/2021, 7:58 PMLukáš Stuchlík
12/06/2021, 8:29 PMcreatedBy: {
connect: {
id: ctx.session.userId,
},
},
...(assignedTo.id && {
assignedTo: {
connect: {
id: Number(assignedTo.id)
}
}
})
essentially, if assignedTo.id exists, you're spreading an object `{ assignedTo: ... }`which should take care of the connectingRyan O'Shea
12/06/2021, 11:23 PM