Javascript 使用sequelize中的另一个表连接两个表

Javascript 使用sequelize中的另一个表连接两个表,javascript,mysql,node.js,sequelize.js,Javascript,Mysql,Node.js,Sequelize.js,我有三个MySQL表:app、app\u元数据和生态系统 应用程序表结构为: +---------------+------------+----+---+-------+--------------+ |Field |Type |Null|Key|Default|Extra | +---------------+------------+----+---+-------+--------------+ |id |bigin

我有三个MySQL表:
app
app\u元数据
生态系统

应用程序表结构为:

+---------------+------------+----+---+-------+--------------+
|Field          |Type        |Null|Key|Default|Extra         |
+---------------+------------+----+---+-------+--------------+
|id             |bigint(20)  |NO  |PRI|NULL   |auto_increment|
|name           |varchar(255)|NO  |   |NULL   |              |
+---------------+------------+----+---+-------+--------------+
+---------------+------------+----+---+-------+--------------+
|Field          |Type        |Null|Key|Default|Extra         |
+---------------+------------+----+---+-------+--------------+
|id             |bigint(20)  |NO  |PRI|NULL   |auto_increment|
|app_id         |bigint(20)  |NO  |MUL|NULL   |              |
|tag_name       |varchar(255)|NO  |   |NULL   |              |
|tag_value      |text        |NO  |   |NULL   |              |
+---------------+------------+----+---+-------+--------------+
+---------------+------------+----+---+-------+--------------+
|Field          |Type        |Null|Key|Default|Extra         |
+---------------+------------+----+---+-------+--------------+
|id             |bigint(20)  |NO  |PRI|NULL   |auto_increment|
|name           |varchar(255)|NO  |   |NULL   |              |
+---------------+------------+----+---+-------+--------------+
app_元数据表结构为:

+---------------+------------+----+---+-------+--------------+
|Field          |Type        |Null|Key|Default|Extra         |
+---------------+------------+----+---+-------+--------------+
|id             |bigint(20)  |NO  |PRI|NULL   |auto_increment|
|name           |varchar(255)|NO  |   |NULL   |              |
+---------------+------------+----+---+-------+--------------+
+---------------+------------+----+---+-------+--------------+
|Field          |Type        |Null|Key|Default|Extra         |
+---------------+------------+----+---+-------+--------------+
|id             |bigint(20)  |NO  |PRI|NULL   |auto_increment|
|app_id         |bigint(20)  |NO  |MUL|NULL   |              |
|tag_name       |varchar(255)|NO  |   |NULL   |              |
|tag_value      |text        |NO  |   |NULL   |              |
+---------------+------------+----+---+-------+--------------+
+---------------+------------+----+---+-------+--------------+
|Field          |Type        |Null|Key|Default|Extra         |
+---------------+------------+----+---+-------+--------------+
|id             |bigint(20)  |NO  |PRI|NULL   |auto_increment|
|name           |varchar(255)|NO  |   |NULL   |              |
+---------------+------------+----+---+-------+--------------+
生态系统表结构为:

+---------------+------------+----+---+-------+--------------+
|Field          |Type        |Null|Key|Default|Extra         |
+---------------+------------+----+---+-------+--------------+
|id             |bigint(20)  |NO  |PRI|NULL   |auto_increment|
|name           |varchar(255)|NO  |   |NULL   |              |
+---------------+------------+----+---+-------+--------------+
+---------------+------------+----+---+-------+--------------+
|Field          |Type        |Null|Key|Default|Extra         |
+---------------+------------+----+---+-------+--------------+
|id             |bigint(20)  |NO  |PRI|NULL   |auto_increment|
|app_id         |bigint(20)  |NO  |MUL|NULL   |              |
|tag_name       |varchar(255)|NO  |   |NULL   |              |
|tag_value      |text        |NO  |   |NULL   |              |
+---------------+------------+----+---+-------+--------------+
+---------------+------------+----+---+-------+--------------+
|Field          |Type        |Null|Key|Default|Extra         |
+---------------+------------+----+---+-------+--------------+
|id             |bigint(20)  |NO  |PRI|NULL   |auto_increment|
|name           |varchar(255)|NO  |   |NULL   |              |
+---------------+------------+----+---+-------+--------------+
我想使用
tag\u value列
tag\u name列
(仅当其值为ecosystem\u id时)从
app\u元数据表
中加入
app table

这是我试图实现这个用例的代码,但它没有生成预期的结果。 实际结果:

{
  "apps": [
    {
      "id": 1,
      "name": "EXAMPLE",
      "appMetadata": [
        {
          "id": 1,
          "tagName": "ecosystem_id",
          "tagValue": "1",
          "appId": 1,
          "ecosystem": {
            "id": 1,
            "name": "default"
          }
        },
        {
          "id": 470,
          "tagName": "vcalmic",
          "tagValue": "2",
          "appId": 1,
          "ecosystem": {
            "id": 2,
            "name": "dc/ed1"
          }
        }
      ]
    }
  ]
}
预期结果:

{
  "apps": [
    {
      "id": 1,
      "name": "EXAMPLE",
      "appMetadata": [
        {
          "id": 1,
          "tagName": "ecosystem_id",
          "tagValue": "1",
          "appId": 1,
          "ecosystem": {
            "id": 1,
            "name": "default"
          }
        },
        {
          "id": 470,
          "tagName": "vcalmic",
          "tagValue": "2",
          "appId": 1,
          "ecosystem": null
        }
      ]
    }
  ]
}
还是这个

{
  "apps": [
    {
      "id": 1,
      "name": "EXAMPLE",
      "ecosystem": {
         "id": 1,
         "name": "default"
       },
      "appMetadata": [
        {
          "id": 1,
          "tagName": "ecosystem_id",
          "tagValue": "1",
          "appId": 1
        },
        {
          "id": 470,
          "tagName": "vcalmic",
          "tagValue": "2",
          "appId": 1
        }
      ]
    }
  ]
}
Models.ecosystem.hasOne(Models.appMetadata,{foreignKey:'tagValue'});
Models.appMetadata.belongsTo(Models.ecosystem,{foreignKey:'tagValue'});
常量选项={
其中:{accountId},
包括:[
{
模型:Models.appMetadata,
包括:[{model:Models.ecosystem}],
}
]
};
const apps=wait Models.app.findAll(选项);

我想您需要添加一个required:false,在'include'对象中为tagValue添加一个where子句。这样,当值为1时,它将带来生态系统

Models.ecosystem.hasOne(Models.appMetadata,{foreignKey:'tagValue'});
Models.appMetadata.belongsTo(Models.ecosystem,{foreignKey:'tagValue'});
常量选项={
其中:{accountId},
包括:[
{
模型:Models.appMetadata,
包括:[{model:Models.ecosystem,必需:false,其中:{tagValue:1}}],
}
]
};

const apps=wait Models.app.findAll(选项)我想您需要添加一个required:false,在'include'对象中为tagValue添加一个where子句。这样,当值为1时,它将带来生态系统

Models.ecosystem.hasOne(Models.appMetadata,{foreignKey:'tagValue'});
Models.appMetadata.belongsTo(Models.ecosystem,{foreignKey:'tagValue'});
常量选项={
其中:{accountId},
包括:[
{
模型:Models.appMetadata,
包括:[{model:Models.ecosystem,必需:false,其中:{tagValue:1}}],
}
]
};

const apps=wait Models.app.findAll(选项)我得到一个错误,
生态系统表中不存在列
tagValue
。我的用例是在
tagName='econosystem\u id'和tagValue=econosystem.id
我得到一个错误,即
生态系统表中不存在列
tagValue
。我的用例是在
tagName='ecosystem\u id'和tagValue=ecosystem.id