2017-04-04 2 views
1

I 2 Modelle Projektmodell und Task-Modell in sequelize definiert haben, wie untenErstellen von Primär- und Fremdschlüsselbeziehungen in Sequelize

import { INTEGER, STRING, DATE } from 'sequelize'; 
import sequelize from '../sequelize'; 
import Task from './task.model' 

const ProjectModel = sequelize.define('project', { 
    project_id: { 
     type: INTEGER, 
     primaryKey: true, 
     autoIncrement: true 
    }, 
    phabricator_project_id: { 
     type: STRING, 
     allowNull: false 
    }, 
    name: { 
     type: STRING 
    }, 
    description: { 
     type: STRING 
    }, 
    start_date: { 
     type: STRING, 
    }, 
    end_date: { 
     type: STRING 
    } 
}, 
    { 
     timestamps: false 
    } 
); 

export default ProjectModel; 

und der Task-Modell

import { INTEGER, STRING, DATE } from 'sequelize'; 
import sequelize from '../sequelize'; 

const TaskModel = sequelize.define('task', { 
    task_id: { 
     type: INTEGER, 
     primaryKey: true, 
     autoIncrement: true 
    }, 
    title: { 
     type: STRING 
    }, 
    status: { 
     type: STRING 
    }, 
    priority: { 
     type: STRING 
    }, 
    description: { 
     type: STRING 
    }, 
    tool_project_id: { 
     type: STRING 
    },   
    date_modified: { 
     type: STRING 
    } 
}, 
    { 
     timestamps: false 
    } 
); 

export default TaskModel; 
gezeigt

Was ich erreichen will ist um eine Beziehung zwischen tool_project_id in TaskModel und phabricator_project_id in ProjectModel zu erstellen (sie sind die gleichen Werte nur Diff-Spaltennamen) und schreiben eine Abfrage für eine GET-Anfrage, die die Daten in der Form

ausgibt

{ {project1Details,TaskDetails-->{task1, task2, task3}, {project2Details,TaskDetails-->{task4, task5, task6}, {project3Details,TaskDetails-->{task7, task8, task9}, {project4Details,TaskDetails-->{task10, task11, task12} }

Der gesamte Datenbankentwurf wurde entsprechend durchgeführt und eine andere Datei wird aufgerufen, um alle diese Datenbanken zu erstellen. Dies ist in Typoskript geschrieben und ich versuchte, dies als eine GET-Methode

listByProjects(req, res) { 
     TaskModel.belongsTo(ProjectModel, { as: 'task' , foreignKey: 'tool_project_id'}); 
     ProjectModel.findAll({ 
      include:[{model:TaskModel}], 
      where:{status:'open'} 
     }).then(function(projects) { 
      res.json(projects); 
     }); 
    } 

Hier in diesem Verfahren mir die Beziehung definieren und versuchen, alle aufzulisten Aufgaben ‚öffnen‘ und sie wieder als Antwort senden, aber ich erhalte den Fehler

Unhandled rejection Error: task is not associated to project!

Jede Hilfe für dieses Problem wäre

+0

Verwendung 'catch' Handler den abgelehnten Zustand der Verheißung zu handhaben –

Antwort

1

die Antwort auf diese Frage WONDER BE ist, dass, wenn Sie die Tabelle erstellen wir die Beziehung erstellen sollte und dann die Tabelle erstellen, wie

Erstellen Sie die Beziehung auch der Name des Schlüssels sollte gleich sein, um eine Beziehung zu erstellen.

TaskModel.belongsTo(ProjectModel, {foreignKey: 'project_id' }); 
ProjectModel.hasMany(TaskModel, { foreignKey: 'project_id' }); 

dann die Tabelle Projekt erstellen und dann Aufgaben

ProjectModel.sync({ force: false }).then(function() { 
    console.log('Project table created'); 
    TaskModel.sync({ force: false }).then(function() { 
     console.log('Task table created'); 
    }); 
}); 

dann in der API-Methode, die Sie aufrufen nur das Modell enthalten, die Sie zur Verfügung stellen möchten, die erforderlichen Daten zu erhalten.

ProjectModel.findAll({ 
     include: [{ 
      model: TimeSheetModel, 
      where: { 
       status: "ACTIVE" 
      }, 
     }], 
    }).then(function (projects) { 
     const responseData = { 
      'status': 1, 
      'message': 'List successfull.', 
      'projects': projects, 
     }; 
     res.json(responseData); 
    }).catch(error => { 
     const responseData = { 
      'status': 1, 
      'message': error.message, 
      'projects': [], 
     }; 
     res.json(responseData); 
}) 

Dies verwendet nodemon und sequilize Knoten und Beziehungen der Tabelle zu verwalten bzw.

Verwandte Themen