【问题标题】:Eager Loading : How to disable specific fields of included table急切加载:如何禁用包含表的特定字段
【发布时间】:2017-04-13 21:24:44
【问题描述】:

我正在尝试使用 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;
};



邮件控制器:

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;
        }
    }



};

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

输出:

{
"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"
             }
         }
 ]
} 

但我想禁用 User 表的 createdAtupdatedAt 字段,以免它给我用户的输出中的这两个字段。

我已经尝试了很多如何做到这一点,但仍然徒劳无功。谁能帮帮我。

【问题讨论】:

  • Hi Prerna Jain 尝试在您通过数据库操作返回的对象上使用Delete 命令。删除您不希望以 JSON 格式返回的字段并以 JSON 格式打印相应的对象。让我知道这是否有效

标签: postgresql crud sequelize.js eager-loading


【解决方案1】:

你可以使用

    Model.findAll({
      attributes: { exclude: ['baz'] }
    });

更多属性示例 - http://docs.sequelizejs.com/en/latest/docs/querying/#attributes

【讨论】:

    猜你喜欢
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多