通过sequelize

时间:2018-01-15 08:59:03

标签: javascript node.js orm sequelize.js

我正在使用sequelize作为带有令人兴奋的数据库的ORM的NodeJs应用程序,因此我必须使用sequelize model generator来为我的应用程序生成模型。
这是生成输出的一个例子:

Category.js

module.exports = function(sequelize, DataTypes) {
    return sequelize.define('category', {
        id: {
            type: DataTypes.STRING(128),
            allowNull: false,
            primaryKey: true,
            field: 'id'
        },
        name: {
            type: DataTypes.TEXT,
            allowNull: true,
            field: 'name'
        }
    }, {
        tableName: 'category'
    });
};

Product.js

module.exports = function(sequelize, DataTypes) {
    return sequelize.define('product', {
        id: {
            type: DataTypes.STRING(128),
            allowNull: false,
            primaryKey: true,
            field: 'id'
        },
        category: {
            type: DataTypes.STRING(128),
            allowNull: false,
            references: {
                model: 'category',
                key: 'id'
            },
            field: 'category'
        },
        name: {
            type: DataTypes.TEXT,
            allowNull: true,
            field: 'name'
        }
    }, {
        tableName: 'product'
    });
};

然后在我的控制器中我有这个查询:

models.product.findOne({
    where: {
        id: req.body.id
    }
}).then(function (obj) {
    //return the product data
    console.log(product.category) //works
    console.log(product.category.name) //return undefined
});

问题是如何通过同一查询findOne访问父表属性?是否有类似于product.category.id的东西?

1 个答案:

答案 0 :(得分:1)

如果你已经关联了两个模型......那么试试这个

O(n)

像这样关联

#include <list>
#include <unordered_map>

template <
    typename Key,
    typename T,
    typename Hash = std::hash<Key>,
    typename KeyEqual = std::equal_to<Key>,
    typename Allocator = allocator<std::pair<Key, T>>
>
class ordered_map
{
public:
    using key_type = Key;
    using mapped_type = T;
    // ....

private:
    using list_type = list<T, typename std::allocator_traits<Allocator>::template rebind_alloc<T>>;
    using list_iterator = typename list_type::iterator;
    using map_type = std::unordered_map<
        Key, list_iterator, Hasah, KeyEqual, 
        typename std::allocator_traits<Allocator>::template rebind_alloc<std::pair<Key, list_iterator>>
    >;

    list_type list_;
    map_type map_;
};