Ich habe die folgende Sequelize-Definition einer Tabelle:
AcademyModule = sequelize.define('academy_module', {
academy_id: DataTypes.INTEGER,
module_id: DataTypes.INTEGER,
module_module_type_id: DataTypes.INTEGER,
sort_number: DataTypes.INTEGER,
requirements_id: DataTypes.INTEGER
}, {
freezeTableName: true});
Wie Sie sehen, enthält id
diese Tabelle keine Spalte. Wenn ich jedoch versuche, es einzufügen, versucht es immer noch die folgende SQL:
INSERT INTO `academy_module` (`id`,`academy_id`,`module_id`,`sort_number`) VALUES (DEFAULT,'3',5,1);
Wie kann ich die id
Funktion deaktivieren, die es eindeutig hat?
javascript
mysql
node.js
sequelize.js
Marc Rasmussen
quelle
quelle
primaryKey: true
Sie einfach die Spalten hinzu , die Sie als Primärschlüssel verwenden möchten.id
Funktion deaktivieren, die sie eindeutig hat?" und diese Antwort versucht, sie mit "Wenn Sie möchten, können Sie den Namen des Primärschlüssels ändern" zu beantworten. Was??id
(Sie können mehrere Felder als festlegenprimaryKey: true
). Wenn Sie nur keine ID auf Ihrem Tisch haben, können Sie es in der Dokumentation von sequelize legazy einfach mitModel.removeAttribute('id');
und entfernen wird eine Tabelle (Modell) ohne Primärschlüssel haben.Wenn Sie den Primärschlüssel für die Tabelle vollständig deaktivieren möchten, können Sie verwenden
Model.removeAttribute
. Seien Sie gewarnt, dass dies in Zukunft zu Problemen führen kann, da Sequelize ein ORM ist und Joins zusätzliche Einstellungen erfordern.const AcademyModule = sequelize.define('academy_module', { academy_id: DataTypes.INTEGER, module_id: DataTypes.INTEGER, module_module_type_id: DataTypes.INTEGER, sort_number: DataTypes.INTEGER, requirements_id: DataTypes.INTEGER }, { freezeTableName: true }); AcademyModule.removeAttribute('id');
quelle
Für einen zusammengesetzten Primärschlüssel sollten Sie allen Spalten des Primärschlüssels "primaryKey: true" hinzufügen. Sequelize betrachtet solche Spalten als Teil eines zusammengesetzten Primärschlüssels.
quelle
Wenn Ihr Modell keine ID-Spalte hat, können Sie Model.removeAttribute ('id') verwenden. es loswerden.
Siehe http://docs.sequelizejs.com/en/latest/docs/legacy/
In Ihrem Fall wäre es also so
AcademyModule = sequelize.define('academy_module', { academy_id: DataTypes.INTEGER, module_id: DataTypes.INTEGER, module_module_type_id: DataTypes.INTEGER, sort_number: DataTypes.INTEGER, requirements_id: DataTypes.INTEGER }, { freezeTableName: true }); AcademyModule.removeAttribute('id');
Hinweis: Sie scheinen eine Join-Tabelle zu erstellen. Betrachten Sie das Erstellen
academy_id
undmodule_id
Primärschlüssel. Auf diese Weise kann derselbe Link nicht mehrmals angezeigt werden, und die Datenbank erstellt nicht umsonst eine versteckte ID-Spalte.quelle