2017-04-25 7 views
0

私はpolicyTablepolicy_ruleという2つのモデルを以下のように定義しています。外部キーであるpolicy_ruleにはpolicy_idという列があり、にはidの列が参照されています。 policy_ruleは複数のpolicyTableを持つことができます。すなわち、1:Nの関係があります。シンプルなインナージョイントを続ける

var policyTable = dbController.db.define('policyTable', { 
    id: { 
     type: Sequelize.BIGINT, 
     autoIncrement: true, 
     primaryKey: true 
    }, 
    't': { 
     type: Sequelize.BIGINT, 
     unique: true 
    }, 
    'name': { 
     type: Sequelize.STRING, 
    }, 
    src: { 
     type: Sequelize.STRING 
    } 
}, { 
    timestamps: false, 
    freezeTableName: true, 
    tableName: 'zo_policy', 
}); 

var policy_rule = dbController.db.define('policy_rule', { 
    policy_id: { 
     type: Sequelize.BIGINT, 
     references: { 
      model: policyTable, 
      key: 'id' 
     }, 
     onUpdate: 'cascade', 
     onDelete: 'cascade' 
    }, 
    agent_id: { 
     type: Sequelize.BIGINT, 
    }, 
    enabled: { 
     type: Sequelize.BOOLEAN, 
    } 
}, { 
    timestamps: false, 
    freezeTableName: true, 
    tableName: 'zo_policy_rule', 
}); 

ここで、この2つのモデルを結合して、両方の列をすべて取得したいと考えています。どうやってやるの?私は以下のコードを試してみましたが、それはあなたの団体は、データベースレベルで定義されているにもかかわらず

Error: policy_rule is not associated to policyTable!

function getAllPolicies() { 
    return policyTable.findAndCountAll({ 
     include: [{ 
      model: policy_rule 
      }] 
    }).then(function (users) { 
     console.log(users); 
     data.count = users.count; 
     data.users = users.rows; 
     console.log(data); 
     return data; 
    }); 
}; 

答えて

1

言うと、あなたはsequelizeのinclude機能を使用するには、お使いの列定義でこれを示して、あなたはまだ明示的に定義する必要がありますあなたのモデル間の関連付けも。ここで

はDOCOの関連するセクションです:あなたのケースではhttp://docs.sequelizejs.com/en/latest/docs/associations/#belongstohttp://docs.sequelizejs.com/en/latest/docs/associations/#1m

、それは以下の線に沿って何かにあなたのコードを調整することを意味します - 各モデル定義における新しいclassMethodsセクションに注意してください。

var policyTable = dbController.db.define('policyTable', { 
    id: { 
     type: Sequelize.BIGINT, 
     autoIncrement: true, 
     primaryKey: true 
    }, 
    't': { 
     type: Sequelize.BIGINT, 
     unique: true 
    }, 
    'name': { 
     type: Sequelize.STRING, 
    }, 
    src: { 
     type: Sequelize.STRING 
    } 
}, { 
    timestamps: false, 
    freezeTableName: true, 
    tableName: 'zo_policy', 
    classMethods: { 
     associate(models) { 
     this.hasMany(models.policy_rule, {foreignKey: 'policy_id'}) 
     } 
    } 
}); 

var policy_rule = dbController.db.define('policy_rule', { 
    policy_id: { 
     type: Sequelize.BIGINT, 
     references: { 
      model: policyTable, 
      key: 'id' 
     }, 
     onUpdate: 'cascade', 
     onDelete: 'cascade' 
    }, 
    agent_id: { 
     type: Sequelize.BIGINT, 
    }, 
    enabled: { 
     type: Sequelize.BOOLEAN, 
    } 
}, { 
    timestamps: false, 
    freezeTableName: true, 
    tableName: 'zo_policy_rule', 
    classMethods: { 
     associate(models) { 
     this.belongsTo(models.policyTable, {foreignKey: 'policy_id'}) 
     } 
    } 
}); 
関連する問題