关于sequelize的3个表:与关系失去了

时间:2014-02-21 15:42:07

标签: sequelize.js

我附表结构:

我构建了SQL

这是我的sql:

选择   criticites.id,   criticites.criticite,   criticites.etat, 从   public.histo_jobs,   public.jobs,   public.criticites 哪里   histo_jobs.job_id = jobs.id AND   critites.jobid = jobs.id;

我在模型之间创建了这些关系:

    Jobs.belongsTo(Criticte ,  {foreignKey : 'jobid'} );
    Criticte.hasMany(Jobs);

    HistoJobs.belongsTo(Jobs, {foreignKey : 'job_id'});
    Jobs.hasMany(HistoJobs);

Criticte.find({             包括:[{model:HistoJobs},{model:Jobs},{model:HistoJobs}],         完成(function(err,resultFound){...

我收到错误: 错误:histo_job与批评无关!。

有人可以帮我这个吗?

非常感谢 enter image description here

4 个答案:

答案 0 :(得分:1)

根据您当前的设置,我建议使用嵌套的预先加载。正如@ dan-rocha已经提到的那样,你只能急切地加载直接关联的模型,这就是为什么你得到关于histo_jobs与批评不相关的错误。没有直接的histojobs belongsTo / hasOne / hasMany批评。

尝试类似:

Criticte.find({
    include: [
        { model: Jobs, include: [
            { model: HistoJobs }
        ]}
    ]
})

答案 1 :(得分:0)

执行此操作的唯一方法(只要我知道,Sequelize上没有使用与另一个关联连接的关联的对象检索)正在创建原始查询并将信息放入Criticite实例< / p>

var query = "SELECT criticites.id, criticites.criticite, criticites.etat, FROM public.histo_jobs, public.jobs, public.criticites WHERE histo_jobs.job_id = jobs.id AND criticites.jobid = jobs.id";
sequelize
.query(query, Criticites)
.success(function(criticites){
    // Each record will now be mapped to the criticite's DAO-Factory.
    console.log(criticites);
})

我真的不明白为什么你需要那个。在调用Criticite.findAll()时你会做

SELECT * FROM criticites

并将其放入Criticite实例中 这与调用

几乎相同
SELECT criticites.id, criticites.criticite, criticites.etat, FROM public.histo_jobs,public.jobs, public.criticites WHERE histo_jobs.job_id = jobs.id AND criticites.jobid = jobs.id;

因为您正在执行未使用的JOIN并选择批评数据库表中的每一列。

希望它有效:)

答案 2 :(得分:0)

你写'Criticte.hasMany(Jobs);'。但是,正如我从您的结构中看到的Criticte只有一个Job。反之亦然Job有很多Criticte,但你写的是Job.belongsTo(Criticte)。请清除这些内容后更新您的问题。

答案 3 :(得分:0)

您需要做的就是像这样的嵌套查询

Criticities.findAll({
             include : [{ 
                          model:Jobs ,
                         include: [ HistoJobs]}
                       ]}).then(result=> {   **** your code here **** })