diff --git a/package-lock.json b/package-lock.json index f1fe8bfc6..65127832b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6040,7 +6040,7 @@ "version": "13.2.1", "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", - "license": "MIT", + "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", diff --git a/src/utils/exportSQL/mysql.js b/src/utils/exportSQL/mysql.js index f35dbda3f..e0bd47c8e 100644 --- a/src/utils/exportSQL/mysql.js +++ b/src/utils/exportSQL/mysql.js @@ -1,7 +1,7 @@ import { escapeQuotes, parseDefault } from "./shared"; import { dbToTypes } from "../../data/datatypes"; -import { DB } from "../../data/constants"; +import { DB, Cardinality } from "../../data/constants"; function parseType(field) { let res = field.type; @@ -64,18 +64,19 @@ export function toMySQL(diagram) { ) .join("\n")}\n${diagram.references .map((r) => { - const { name: startName, fields: startFields } = diagram.tables.find( - (t) => t.id === r.startTableId, - ); + const startTable = diagram.tables.find((t) => t.id === r.startTableId); + const endTable = diagram.tables.find((t) => t.id === r.endTableId); + const startField = startTable.fields.find((f) => f.id === r.startFieldId); + const endField = endTable.fields.find((f) => f.id === r.endFieldId); - const { name: endName, fields: endFields } = diagram.tables.find( - (t) => t.id === r.endTableId, - ); - return `ALTER TABLE \`${startName}\`\nADD FOREIGN KEY(\`${ - startFields.find((f) => f.id === r.startFieldId).name - }\`) REFERENCES \`${endName}\`(\`${ - endFields.find((f) => f.id === r.endFieldId).name - }\`)\nON UPDATE ${r.updateConstraint.toUpperCase()} ON DELETE ${r.deleteConstraint.toUpperCase()};`; + const isOneToMany = r.cardinality === Cardinality.ONE_TO_MANY; + + const fkTableName = isOneToMany ? endTable.name : startTable.name; + const fkFieldName = isOneToMany ? endField.name : startField.name; + const refTableName = isOneToMany ? startTable.name : endTable.name; + const refFieldName = isOneToMany ? startField.name : endField.name; + + return `ALTER TABLE \`${fkTableName}\`\nADD FOREIGN KEY(\`${fkFieldName}\`) REFERENCES \`${refTableName}\`(\`${refFieldName}\`)\nON UPDATE ${r.updateConstraint.toUpperCase()} ON DELETE ${r.deleteConstraint.toUpperCase()};`; }) .join("\n")}`; -} +} \ No newline at end of file