我有两个模型CompanyCompanyAdmin。模型公司有许多CompanyAdmins。我正在尝试使用书架插件bookshelf-cascade-delete删除母公司时删除CompanyAdmins。我也使用knex连接mysql db。这是我的模型:

const db = bookshelf(connection);
db.plugin(cascadeDelete);

const Company = db.Model.extend({
    tableName: 'company',
    idAttribute: 'id',
    hasTimestamps: true,
    company_admins: function () { return this.hasMany(CompanyAdmin); }, // console.log(this);
}, {
    dependents: ['company_admins'],
});

const CompanyAdmin = db.Model.extend({
    tableName: 'company_admin',
    idAttribute: 'id',
    hasTimestamps: true,
    company: function () { return this.belongsTo(Company) },
});


当我在company_admins函数中console.log(this)时,我得到以下数据:

ModelBase {
  tableName: 'company',
  idAttribute: 'id',
  hasTimestamps: true,
  company_admins: [Function: company_admins] }


这是我的DELETE路由处理程序:

.delete((req, res) => {
    if (req.user) {
        Company.forge({
            id: req.user.attributes.company_id,
        })
        .destroy()
        .then(() => {
            res.status(200)
            .json({
                status: 200,
                error: false,
            });
            req.logout();
        }).catch((err) => {
            console.log(err);
            res.status(500)
            .json({
                status: 500,
                error: err.message,
            });
        });
    } else {
        res.status(401)
        .json({
            status: 401,
            message: 'User not authenticated',
        });
    }
});


我收到此错误:


  TypeError:无法读取未定义的属性“ hasMany”


有人有同样的问题吗?

最佳答案

我解决了导入书架时出错。
我之前使用的代码是:

import bookshelf from 'bookshelf';
const db = bookshelf(connection);


正确导入书架看起来像这样:

const db = require('bookshelf')(connection);


不太清楚为什么以前的代码不起作用,但是修改后的版本效果很好!

10-08 12:37