postgresql - 预加载 : How to disable specific fields of included table

标签 postgresql crud sequelize.js eager-loading

我正在尝试使用 PostgreSQL 在 Sequelize 中执行 Eager Loading,我需要在其中找到具有给定特定 Mail id 或的 Users基本上,我正在对 Mail 模型执行查找操作,同时使用 include 来包含 User 模型

用户模型:

module.exports = function (sequelize, Sequelize) {


    var User = sequelize.define('User', {
        userId: {
            type: Sequelize.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        firstname: {
            type: Sequelize.STRING,
            require: true
        },
        lastname: {
            type: Sequelize.STRING,
            require: true
        },
        age: {
            type: Sequelize.INTEGER,
            require: true
        },
        phone: {
            type: Sequelize.STRING,
            require: true
        },
        location: {
            type: Sequelize.STRING,
            require: true
        },
        createdAt: {
            type: Sequelize.DATE,
            defaultValue: Sequelize.NOW
        },
        updatedAt: {
            type: Sequelize.DATE,
            defaultValue: Sequelize.NOW
        }
    });

    return User;

};



邮件模型:

module.exports = function (sequelize, Sequelize) {



    var User = require('./User.js')(sequelize, Sequelize)


    var Mail = sequelize.define('Mail', {
        name: {
            type: Sequelize.STRING,
            require: true
        }
    });


    Mail.belongsTo(User);

    return Mail;
};



邮件 Controller :

var db = require('../services/db.js');

module.exports = {
    create: function (req, res, next) {

        var Mailm = db.MailModel;
        var name = req.body;
        try {

            db.sequelize.sync().then(function () {

                Mailm.create(name).then(function (found) {

                    return res.json({
                        success: true,
                        message: found.get({
                            plain: true
                        })
                    });
                })

            });

        } catch (ex) {
            res.json({
                success: false,
                exception: ex
            });
            return;
        }

    },
query: function (req, res, next) {

        var Mailm = db.MailModel;
        var Userm = db.UserModel;
        var name = req.body;


        var option = {};
        option.where = name;
        option.include = [{
            model: Userm

        }];

        try {
            Mailm.findAll(option).then(function (found) {
                console.log(found);
                return res.json({
                    success: true,
                    message: found
                });

            });
        } catch (ex) {
            res.json({
                success: false,
                exception: ex
            });
            return;
        }
    }



};

它以完全正确的方式返回用户表和邮件表的记录。

Output :

{
"success": true,
"message":[
{
"id": 2,
"name": "Mailb2",
"createdAt": "2015-07-30T07:32:51.807Z",
"updatedAt": "2015-07-30T07:32:51.807Z",
"UserUserId": 2,
     "User":{
              "userId": 2,
              "firstname": "Prerna",
              "lastname": "Jain",
              "age": 20,
              "phone": "9812123456",
              "location": "Sirsa",
              "createdAt": "2015-07-30T07:30:48.000Z",
              "updatedAt": "2015-07-30T07:30:48.000Z"
             }
         }
 ]
} 

但我想禁用 createdAtupdatedAt User 表的字段,这样它就不会给我用户输出中的这两个字段。

我已经尝试了很多关于如何做到这一点,但仍然是徒劳的。任何人都可以帮助我。

最佳答案

我敢打赌这会迟到,将属性/特性添加到您的模型中,称为时间戳,它接受一个 bool 值作为值。例如:

module.exports = function (sequelize, Sequelize) {



    var User = require('./User.js')(sequelize, Sequelize)


    var Mail = sequelize.define('Mail', {
        name: {
            type: Sequelize.STRING,
            require: true
        }
    }, 
    {
    // This does the magic

        timestamps: false,
    });


    Mail.belongsTo(User);

    return Mail;
};

此外,将其添加到用户模型中:

    var User = sequelize.define('User', {
        userId: {
            type: Sequelize.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        firstname: {
            type: Sequelize.STRING,
            require: true
        },
        lastname: {
            type: Sequelize.STRING,
            require: true
        },
        age: {
            type: Sequelize.INTEGER,
            require: true
        },
        phone: {
            type: Sequelize.STRING,
            require: true
        },
        location: {
            type: Sequelize.STRING,
            require: true
        },
        createdAt: {
            type: Sequelize.DATE,
            defaultValue: Sequelize.NOW
        },
        updatedAt: {
            type: Sequelize.DATE,
            defaultValue: Sequelize.NOW
        }
    }, 
     {
timestamps: false
  });

    return User;

};

关于postgresql - 预加载 : How to disable specific fields of included table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31722834/

相关文章:

c# - Entity Framework Core 2(代码优先)更新值不起作用

javascript - PostgreSQL GeoJSON <- php -> JavaScript

php - 使用 PHP、PDO 和 MySql 在一页上显示两个表

crud - 如何安全地删除用 yo (mean.js) 构建的 CRUD 模块

ruby-on-rails - Rails 单表继承。共享 Controller ,如何更新 (CRUD)

mysql - 使用 Sequelize 从文件插入 Node.js 数据库

sql - 计算两个日期之间的完整月份

防止 SQL 注入(inject)的 PostgreSQL 美元引号字符串常量

node.js - 如果我传递的对象具有除表中现有的属性更多的属性,sequelize 更新方法是否会在表中创建新列?

node.js - Sequelize : instance. get 不是函数(升级后)