Sql 从sequelize中的多个表中选择
我正在努力使用Sequelize从两个表中进行选择 事实上,我正在尝试这样做:Sql 从sequelize中的多个表中选择,sql,node.js,postgresql,sequelize.js,Sql,Node.js,Postgresql,Sequelize.js,我正在努力使用Sequelize从两个表中进行选择 事实上,我正在尝试这样做: 从用户中选择*,其中user.id=clients.user\u id 我不知道如何使用我所描述的两个表,我所做的唯一得到一些结果的事情是: const clients=wait Client.findAll({ 属性:[“用户id”], }); 常量用户=[]; for(客户端的常量客户端){ let user=wait user.findAll({ 其中:{ 身份证:{ [Op.eq]:client.user\
从用户中选择*,其中user.id=clients.user\u id
我不知道如何使用我所描述的两个表,我所做的唯一得到一些结果的事情是:
const clients=wait Client.findAll({
属性:[“用户id”],
});
常量用户=[];
for(客户端的常量客户端){
let user=wait user.findAll({
其中:{
身份证:{
[Op.eq]:client.user\u id
}
}
});
push(用户);
}
这给了我一些回报:
[
[
{
"id": 1,
"first_name": "Velda",
"middle_name": "Zboncak",
"last_name": "Kris",
"email": "vkris10@hotmail.com",
"created_at": "2020-02-07T20:09:29.484Z",
"updated_at": "2020-02-07T20:09:29.484Z"
}
]
];
可以使用中的where包括。在以下位置找到文档: 模型与关联 首先,您需要在表的模型中创建正确的。在这种情况下,对于用户和客户端,它应该是一个
客户端。belongsTo(…)
请看用户型号:
const{Model,DataTypes}=require(“sequelize”);
类用户扩展模型{
静态初始化(sequelize){
super.init({
第一个名称:DataTypes.STRING,
中间名称:DataTypes.STRING,
姓氏:DataTypes.STRING,
电子邮件:DataTypes.STRING
},{sequelize});
}
}
module.exports=用户;
请看客户机型号:
const{Model,DataTypes}=require(“sequelize”);
类客户端扩展模型{
静态初始化(sequelize){
super.init({
user\u id:DataTypes.INTEGER//外键
},{sequelize});
}
静态助理(模型){
Client.belongsTo(models.User、{
foreignKey:“id”//关联表的列名
as:“表的用户”//别名
});
}
}
module.exports=客户端;
在关联表时,您需要记住associate
方法中的那些值,即外键:“id”
模型中的列名。ModelName将用于进行连接,作为:“user”
用作表的别名,如从表中选择t.column1作为t代码>
控制器
好的,现在你已经设置好了你的模型,你需要设置你的控制器,魔法发生的地方。正如您所说,您希望使用以下方法获取结果:
从用户中选择*,其中user.id=clients.user\u id
但是为了获得相同的结果,您可以按照从db获取结果,因此如下所示:
选择
“用户”“名字”“用户”“中间名”“用户”“姓氏”“用户”“电子邮件”
从“客户”变为“客户”
以“用户”的身份左键加入“用户”
在“客户机”上,“id”=“用户”“id”;
知道我们可以在sequelize中讨论,这与
现在让我们谈谈代码中发生了什么:
Model.findAll({})
将获取指定表中的所有结果,在本例中为clients
表
limit:25
将结果限制在25行,您可以根据需要自由删除或编辑
include:[]
,它将通过您指定的表进行连接,因为您只需要users
表,我们将只使用一个对象,因此关联:“user”
将在表之间建立此连接,您必须使用您在模型内设置的相同别名。至少在属性:[“columns”]
中可以设置要获取的所有字段
就是这样,你提出你的请求,结果将与我提到的完全相同。结果将是:
[
{
"id": 1,
"user_id": 1,
"user": {
"first_name": "John",
"middle_name": "Ironsight",
"last_name": "Doe",
"email": "johndoe@example.com"
}
}, {...}
]
考虑到您每次都需要一个新的客户端,它将在一个非常特殊的情况下工作。我认为sqlJOIN
方法将为他提供所需的结果。
const Client = require("./path/to/models/Client");
module.exports = {
async fetchAll(req, res) {
const results = await Client.findAll({
limit: 25,
include: [
{
association: "user",
attributes: ["first_name", "middle_name", "last_name", "email"]
}
]
});
return res.json(results);
},
};
[
{
"id": 1,
"user_id": 1,
"user": {
"first_name": "John",
"middle_name": "Ironsight",
"last_name": "Doe",
"email": "johndoe@example.com"
}
}, {...}
]