簡體   English   中英

Node Js和Sequalize模型從兩個表中獲取數據

[英]Node Js and Sequalize model to get data from two tables

我有一個模型,該模型將使用節點和均衡使人們回到我身邊。 模型看起來像這樣

class DbModel implements IModelMaker {

  static _model: IDatabaseModel = null;

  getModel(db: ISequelize): IDatabaseModel {
    if (DbModel._model)
      return DbModel._model;
    const options = helper.getDatabaseDefaultOptions('people');
    const entity: any = {};
    entity['people_id'] = {type: Sequelize.UUID, primaryKey: true, 'defaultValue': Sequelize.UUIDV4};
    entity['sexes_id'] = helper.getForeignKey('sexes_id', sexes.getModel(db));
    entity['marital_states_id'] = helper.getForeignKey('marital_states_id', marital_states.getModel(db));
    entity['employment_states_id'] = helper.getForeignKey('employment_states_id', employment_states.getModel(db));
    entity['linkedins_id'] = helper.getForeignKey('linkedins_id', linkedins.getModel(db));
    entity['facebooks_id'] = helper.getForeignKey('facebooks_id', facebooks.getModel(db));
    entity['first_names'] = Sequelize.TEXT;
    entity['surnames'] = Sequelize.TEXT;
    entity['name_to_call_user'] = Sequelize.TEXT;
    entity['id_number'] = Sequelize.TEXT;
    entity['passport_number'] = Sequelize.TEXT;
    entity['birth_date'] = Sequelize.DATEONLY;
    entity['tax_number'] = Sequelize.TEXT;
    entity['vat_number'] = Sequelize.TEXT;
    entity['message_to_show_on_user_invoice'] = Sequelize.TEXT;
    entity['workplace_name'] = Sequelize.TEXT;
    entity['is_verified'] = Sequelize.BOOLEAN;
    entity['has_private_profile_enabled'] = Sequelize.BOOLEAN;
    entity['mobile_phone'] = Sequelize.TEXT;
    entity['occupations_id'] = Sequelize.UUID;
    entity['profile_photo_url'] = Sequelize.TEXT;
    entity['private_profile_url'] = Sequelize.TEXT;
    entity['public_profile_url'] = Sequelize.TEXT;
    entity['description'] = Sequelize.TEXT;
    entity['created_at'] = Sequelize.DATE;
    const result = db.define('dbo.people', entity, options);
    result.belongsTo(sexes.getModel(db), {foreignKey: 'sexes_id'});
    result.belongsTo(marital_states.getModel(db), {foreignKey: 'marital_states_id'});
    result.belongsTo(employment_states.getModel(db), {foreignKey: 'employment_states_id'});
    result.belongsTo(linkedins.getModel(db), {foreignKey: 'linkedins_id'});
    result.belongsTo(facebooks.getModel(db), {foreignKey: 'facebooks_id'});
    DbModel._model = result;
    return result;
  }

這使我得到了存儲在dbo.people表中的結果,這很棒,因為這正是我想要的,並且該模型對此非常有效。 現在,我要做的就是添加到該模型中並從另一個表中調用數據。 因此,我想從dbo.users_references獲取數據以使用此模型進行調用。

我的問題是,有沒有一種方法可以將join語句添加到上面創建的模型中,或者我需要創建一個新模型並將其作為單獨的函數調用。 第二種方法適用於我的情況,但是我想保持簡單,因此,如果我可以將其全部集成到一個模型中,那么我會很高興,否則我只能對另一個選擇感到滿意

您將需要為users_references define一個模型,並以與處理sexesmarital_states等相同的方式將其關聯。當指定要include時, marital_states實際上將在查詢時發生。

用法示例:

DbModel.findAll({
  where: ...,
  include: [
    { model: employment_states.getModel(db) },
    { model: users_references.getModel(db) }
  ]
});

如果這看起來有點麻煩,我很抱歉-是的,因為我收集到您的項目中有很多輔助邏輯,這些邏輯不在發布中。 您可能想要查看這些文檔 ,但是坦白地說,它們對於如何從查詢中的相關表中實際獲取數據有些困惑,但是對於您所描述的內容,它們應該足夠介紹。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM