Столбец SUM на книжной полке - PullRequest
0 голосов
/ 02 апреля 2020

Я хочу суммировать столбец в книжной полке js. Мой запрос настроен как

return this.hasMany('MutualFundPortfolio').query().sum('balance');

Но у меня появляется эта ошибка TypeError: Cannot read property 'parentFk' of undefined Любое тело имеет какие-либо подсказки, как решить эту проблему? Кажется, Книжная полка не поддерживает sum

const moment = require('moment');

const Bookshelf = require('../bookshelf');

require('./wishlist');
require('./kyc');

require('./wallet');

const User = Bookshelf.Model.extend({
    tableName: 'users',
    hasTimestamps: true,
    hidden: ['code', 'password'],
    toJSON(...args) {
        const attrs = Bookshelf.Model.prototype.toJSON.apply(this, args);
        attrs.created_at = moment(this.get('created_at')).add(1, 'hour').format('YYYY-MM-DD HH:mm:ss');
        attrs.updated_at = moment(this.get('updated_at')).add(1, 'hour').format('YYYY-MM-DD HH:mm:ss');
        return attrs;
    },
    local_wallet() {
        return this.hasMany('LocalWallet').query((qb) => {
            qb.orderBy('id', 'DESC').limit(1);
        });
    },
    mutual_fund_portfolio() {
        return this.hasMany('MutualFundPortfolio').query().sum('balance');
    },
    global_wallet() {
        return this.hasMany('GlobalWallet').query((qb) => {
            qb.orderBy('id', 'DESC').limit(1);
        });
    },
    local_gift_card_wallet() {
        return this.hasMany('LocalGiftCardWallet').query((qb) => {
            qb.orderBy('id', 'DESC').limit(1);
        });
    },
    global_gift_card_wallet() {
        return this.hasMany('GlobalGiftCardWallet').query((qb) => {
            qb.orderBy('id', 'DESC').limit(1);
        });
    }
});

module.exports = Bookshelf.model('User', User);

Выше приведена полная модель пользователя. Затем я получаю значение как

return User.where({ id })
            .orderBy('id', 'DESC')
            .fetch({
                withRelated: [
                    'mutual_fund_portfolio',
                    'local_wallet',
                    'global_wallet',
                    'local_gift_card_wallet',
                    'global_gift_card_wallet'
                ]
            })

mutual_fund_portfolio выходит в виде пустого массива.

1 Ответ

0 голосов
/ 02 апреля 2020

hasMany выполняет простое SQL соединение для ключа. Я считаю, что ошибка TypeError: Cannot read property 'parentFk' of undefined относится к тому факту, что таблица, на которую вы ссылаетесь здесь MutualFundPortfolio, не разделяет ключ с таблицей в модели, которую вы здесь используете.

Она не видна над образцом, но я Я предполагаю, что это что-то вроде:

const User = bookshelf.model('User', {
  tableName: 'users',
  books() {
    return this.hasMany('MutualFundPortfolio').query().sum('balance');
  }
})

В моем гипотетическом примере таблица users имеет столбец идентификатора первичного ключа userId, который также находится в MutualFundPortfolio в качестве внешнего ключа. Я предполагаю, что ошибка в том, что MutualFundPortfolio не имеет этот столбец / внешний ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...