Javascript 使用sequelize中的另一个表连接两个表
我有三个MySQL表: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
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