2014-02-21 2 views
0

я прикрепил структуры таблиц:3 таблицы по sequelize: потерявшие с отношениями

Я построил SQL

Это мой SQL:

ВЫБРАТЬ criticites.id, criticites.criticite, criticites .etat, ИЗ public.histo_jobs, public.jobs, public.criticites ГДЕ histo_jobs.job_id = jobs.id D critites.jobid = jobs.id;

Я создал эти отношения между моими моделями:

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

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

Criticte.find ({ включают: [{модель: HistoJobs}, {модель: Работа}, {модель: HistoJobs}], }) .complete (функция (эээ, результатнайдено) {...

и я получил сообщение об ошибке: ошибка: histo_job не связан с criticite !.

Может кто-то помочь мне с этим, пожалуйста,

?

Большое спасибо enter image description here

ответ

0

Единственный способ сделать это (до тех пор, как я знаю, поиска объекта с ассоциацией вместе с другим объединением не доступен на Sequelize) создает необработанный запрос и ввод информации в Criticite например

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 и выбирая каждый столбец на ваших criticites db-таблица.

Надеется, что это работает :)

1

С текущей настройкой я бы рекомендовал использовать вложенную жадную загрузку. Как уже упоминалось в @ dan-rocha, вы можете только загружать модели загрузки, которые напрямую связаны, поэтому вы получаете ошибку в том, что histo_jobs не ассоциируется с критикой. Нет прямых гистобьев, принадлежащих To/hasOne/hasMany critites.

Попробуйте что-то вроде:

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

Вы пишете 'Criticte.hasMany (Jobs);'. Но, как я вижу из вашей структуры Criticte имеет только один Job. И наоборот Job имеет много Criticte, но вы пишете Job.belongsTo(Criticte). Обновите свой вопрос, прояснив это.

Смежные вопросы