我附表结构:
我构建了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与批评无关!。
有人可以帮我这个吗?
非常感谢
答案 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 **** })