Sql 从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\

我正在努力使用Sequelize从两个表中进行选择

事实上,我正在尝试这样做:

从用户中选择*,其中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"
        }
    }, {...}
]

考虑到您每次都需要一个新的
客户端,它将在一个非常特殊的情况下工作。我认为sql
JOIN
方法将为他提供所需的结果。
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"
        }
    }, {...}
]