2015-09-29 3 views
0

У меня есть две таблицы. Как связать поле в первой таблице с полем id во второй таблице в Sequelize? Пример:Полевое объединение Sequelize

Первый стол:

id | author | text 
1 | 2  | 'test1' 
2 | 2  | 'test2' 
3 | 1  | 'test3' 

Второй стол:

id | name 
1 | John 
2 | Jane 

О значениях запроса из первого результата таблицы должна содержать имя в author поле. Пример:

first.findAll().then(function(result) { 
    console.log(result); 
}); 

возвращений:

id | author | text 
1 | Jane | 'test1' 
2 | Jane | 'test2' 
3 | John | 'test3' 

(Извините за плохой английский)

ответ

1

Вы ищете associations.

Ваши модели будут выглядеть как этот

'use strict'; 
module.exports = function(sequelize, DataTypes) { 
    var Table1 = sequelize.define('Table1', { 
    text: { 
     type:DataTypes.STRING 
    }, 
    authorId: { 
     type: DataTypes.INTEGER, 
     references: "Table2", 
     referencesKey: "id", 
     allowNull: false 
    } 
    }, { 
    classMethods: { 
     associate: function(models) { 
     Table1.belongsTo(models.Table2, { foreignKey: 'authorId' }) 
     } 
    } 
    }); 
    return Table1; 
}; 

'use strict'; 
module.exports = function(sequelize, DataTypes) { 
    var Table2 = sequelize.define('Table2', { 
    name: { 
     type:DataTypes.STRING 
    } 
    }, { 
    classMethods: { 
     associate: function(models) { 
     Table2.hasMany(models.Table1, { foreignKey: 'authorId' }) 
     } 
    } 
    }); 
    return Table2; 
}; 

И кажется, что вы хотите готовы загрузить свои авторы.

Table1.findAll({ 
    include:[ 
     { model: Table2 } 
    ] 
}).then(function(result){ 
    console.log(result.get({plain:true}) 
}) 
+0

Но если таблица2 содержит много полей, как указать поле 'name'? – Vladimir37

+1

@ Vladimir37 'Include' останется в таблице. Вы получите результат table1 с объектом Table2, у которого есть поле 'name'. –

+0

Не понимаю. Вы можете попробовать код, который бы сделал то же самое, но если в таблице 2 есть много полей? – Vladimir37

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