diff --git a/frontend/src/erd/prisma.ts b/frontend/src/erd/prisma.ts index 211dfdd8d..696a9ca39 100644 --- a/frontend/src/erd/prisma.ts +++ b/frontend/src/erd/prisma.ts @@ -59,7 +59,7 @@ export function exportPrisma( const fkNodeColumnPairs = new Set(); const fkNodesWithoutHandles = new Set(); const incomingRelationsByNode = new Map>(); - const edgesProcessed = new Map(); + const edgesProcessedByField = new Map(); for (const edge of edges) { const sourceNode = nodesById.get(edge.source); @@ -93,7 +93,7 @@ export function exportPrisma( }); incomingRelationsByNode.set(edge.target, relList); - edgesProcessed.set(edge.id, { + edgesProcessedByField.set(`${sanitizeName(sourceNode.data.title)}:${sanitizeName(sourceField)}`, { sourceModel: sanitizeName(sourceNode.data.title), targetModel: sanitizeName(targetNode.data.title), sourceFields: [sanitizeName(sourceField)], @@ -136,13 +136,12 @@ export function exportPrisma( // Determine if there is a relation defined on this field let relationDef = ""; - for (const [_, edgeInfo] of edgesProcessed) { - if (edgeInfo.sourceModel === modelName && edgeInfo.sourceFields.includes(fieldName)) { - // This field is a foreign key, but in Prisma, we typically define the relation object field - // alongside the scalar field. We will add the relation object field here. - const relField = sanitizeName(edgeInfo.targetModel) + "_" + fieldName; - relationDef = `\n ${relField} ${edgeInfo.targetModel}${optional} @relation("${edgeInfo.relationName}", fields: [${fieldName}], references: [${edgeInfo.targetFields[0]}])`; - } + const edgeInfo = edgesProcessedByField.get(`${modelName}:${fieldName}`); + if (edgeInfo && edgeInfo.sourceFields.includes(fieldName)) { + // This field is a foreign key, but in Prisma, we typically define the relation object field + // alongside the scalar field. We will add the relation object field here. + const relField = sanitizeName(edgeInfo.targetModel) + "_" + fieldName; + relationDef = `\n ${relField} ${edgeInfo.targetModel}${optional} @relation("${edgeInfo.relationName}", fields: [${fieldName}], references: [${edgeInfo.targetFields[0]}])`; } output += ` ${fieldName} ${prismaType}${optional}${attributes}${relationDef}\n`;