2017-11-29 2 views
0

.populate가 Sails에서 작동하는 데 문제가 있습니다. 아래의 모델을 사용하고 .populateAll을 사용하면 연관성과 데이터가 생기지 만 두 개의 돛을 생성 할 수 있습니다. 나는 그 학교와 관련된 데이터베이스와 모든 리뷰로부터 학교 기록을 얻을 수 있기를 원합니다. 어떤 도움을 환상적 일 것 .populate("Reviews")Sails.js 채우기 문제

에 대한 지침을 가입 구축하는 동안 발생했습니다 예기치 않은 오류 :

오류 : 나는) (.populate를 사용하는 경우, 나는 오류!

Schools.js 모델

module.exports = { 
    autoCreatedAt: false, 
    autoUpdatedAt: false, 
    tableName:'schools', 
    attributes: { 
    SID: { 
     type: 'integer', 
     autoIncrement: true, 
     primaryKey: true, 
     size: 15 
    }, 
    schoolName: { 
     type: 'text', 
    }, 
    schoolCity: { 
     type: 'text', 
    }, 
    schoolCountry: { 
     type: 'text', 
    }, 
    schoolRegion: { 
     type: 'text', 
    }, 
    schoolWebsite: { 
     type: 'text', 
    }, 
    schoolCountryCode: { 
     type: 'text', 
    }, 
    schoolNumbStudents: { 
     type: 'integer', 
    }, 
    schoolNumbFaculty: { 
     type: 'integer', 
     size: 4, 
     defaultsTo: '0' 
    }, 
    schoolCurriculum: { 
     type: 'text', 
    }, 
    schoolLanguage: { 
     type: 'text', 
    }, 
    schoolLangInstruction: { 
     type: 'text', 
    }, 
    schoolonetoone: { 
     type: 'text', 
    }, 
    schoolAccred: { 
     type: 'text', 
    }, 
    schoolRatio: { 
     type: 'string', 
     size: 3 
    }, 
    schoolMission: { 
     type: 'text', 
    }, 
    schoolFiveWords: { 
     type: 'text', 
    }, 
    schoolInitiatives: { 
     type: 'text', 
    }, 
    schoolSalaryMin: { 
     type: 'text', 
    }, 
    schoolSalaryMax: { 
     type: 'text', 
    }, 
    schoolSalaryBA: { 
     type: 'text', 
    }, 
    schoolSalaryBAPlus: { 
     type: 'text', 
    }, 
    schoolSalaryMA: { 
     type: 'text', 
    }, 
    schoolSalaryMAPlus: { 
     type: 'text', 
    }, 
    schoolHealth: { 
     type: 'text', 
    }, 
    schoolAirfare: { 
     type: 'text', 
    }, 
    schoolAirfareProv: { 
     type: 'text', 
    }, 
    schoolHousing: { 
     type: 'text', 
    }, 
    schoolDependent: { 
     type: 'text', 
    }, 
    schoolShipping: { 
     type: 'text', 
    }, 
    schoolRetirement: { 
     type: 'text', 
    }, 
    schoolreviews: { 
     collection: 'Reviews', 
     via: 'schoolID', 
     dominant: true 
    } 
    } 
}; 

Reviews.js 모델

module.exports = { 
    autoCreatedAt: false, 
    autoUpdatedAt: false, 
    tableName:'reviews', 
    attributes: { 
    RID: { 
     type: 'integer', 
     required: true, 
     autoIncrement: true, 
     primaryKey: true, 
     size: 15 
    }, 
    schoolID: { 
     type: 'integer', 
     required: true, 
     size: 15, 
     model:'Schools' 
    }, 
    profileID: { 
     type: 'integer', 
     required: true, 
     size: 15 
    }, 
    active: { 
     type: 'integer', 
     required: true, 
     size: 1 
    }, 
    dateCreated: { 
     type: 'date', 
     required: true, 
     defaultsTo: 'CURRENT_TIMESTAMP' 
    }, 
    Q1: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q2: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q3: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q4: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q5: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q6: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q7: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q8: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q9: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q10: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q11: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q12: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q13: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q14: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q15: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q16: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q17: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q18: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q19: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q20: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q21: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q22: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q23: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q24: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q25: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q26: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q27: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q28: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q29: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q30: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q31: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q32: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q33: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q34: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q35: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q36: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q37: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q38: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q39: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q40: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q41: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q42: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q43: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q44: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q45: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q46: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q47: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q48: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q49: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q50: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q51: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    Q52: { 
     type: 'integer', 
     required: true, 
     size: 2 
    }, 
    freeReview: { 
     type: 'text', 
     required: true 
    } 
    } 
}; 

ReviewsController.js 학교를 가정

module.exports = { 
    reviews: function(req, res){ 
    Schools.findOne(1) 
     .populate('reviews') 
     .exec(function afterFind(err, theresults) { 
     if (err) return res.serverError(err); 
     return res.view({thereviews: theresults}); 
    }); 
    }, 
    schoolreviews: function(req, res){ 
    Reviews.find() 
     .exec(function afterFind(err, theresults) { 
     if (err) return res.serverError(err); 
     return res.view({thereviews: theresults}); 
    }); 
    }, 
    testsearch: function(req, res){ 
    Schools.findOne(1).populate('Reviews').exec(function(err, user) { 
     console.log(user); 
    }); 
    }, 
}; 

답변

0

-> 리뷰 많은 관계로 1입니다. 모델 설정이 잘못되었습니다. 각 학교에 학교와 .populate 리뷰 데이터를 조회 할 경우, 당신은이 같은 학교 모델 컬렉션으로 리뷰를 추가해야합니다

reviews: { 
    collection: 'reviews', 
    via: 'school' 
} 

참고 : 컬렉션 속성은 소문자 모델 이름입니다.

그런 다음 Review 모델에서 SchoolID 특성을 Schools 모델에 대한 참조로 바꿉니다. ('학교')

school: { 
    required: true, 
    model: 'schools' 
} 

주 Reviews.find (...)를 채울 : 당신이 발견 할 때(). 예를 들어, - 이것은 당신이 리뷰에 쿼리를 할 때 학교 데이터를 반환 할 수 있습니다 리뷰 없이 .populate() 학교 속성은 학교 기록의 _id가됩니다.