【问题标题】:How to validate if sum of values are equal in Validation如何在验证中验证值的总和是否相等
【发布时间】:2018-10-03 02:51:58
【问题描述】:

我有一个会计项目,我需要在保存到数据库之前验证借方和贷方是否相等。

例如

accounts: [
    {

        id: 1,
        account_id: 1,
        debit:  1000
    },
    {
        id: 2,
        account_id: 5,
        credit: 1500
    },
    {
        id: 3,
        account_id: 8,
        debit: 500
    }
]

顺便说一句,我使用的是 axios 和 lodash。

axios.post('/api/journals', {

    accounts : map(this.accounts, function(account) {

        account_id: account.account_id,
        debit: account.debit,
        credit: account.credit
    })
}

任何人都可以建议如何实施此验证规则。

【问题讨论】:

  • 您想对所有帐户 ID 执行此规则吗?借方和贷方金额似乎属于不同的帐户:它们应该如何合并?
  • @Terry。是的,我认为。我有一个发布表,它是一个数据透视表(account_journal)。第一步是创建日记帐,然后将其附加到过帐表中。

标签: laravel laravel-5 vuejs2


【解决方案1】:

验证规则与 Laravel 或 VueJS 无关。您只需使用 lodash 遍历您的 accounts 数组,分别对借方和贷方号码求和,然后进行比较:

var debitSum = _.reduce(data.accounts, function(sum, account) {
  return (account.debit || 0) + sum;
}, 0);

var creditSum = _.reduce(data.accounts, function(sum, account) {
  return (account.credit || 0) + sum;
}, 0);

console.log('Debit: ' + debitSum + '; Credit: ' + creditSum);

if (debitSum !== creditSum) {
    // Debit and credit sums do not match
} else {
    // Debit and credit sums match
}

上面的代码使用_.reduce() 方法来计算借方/贷方金额的总和。由于debitcredit键不能保证一直存在,我们使用||操作符在它为假时赋值为0(例如undefinednull0,空字符串等)

这是一个概念验证示例:

var data = { accounts: [{
    id: 1,
    account_id: 1,
    debit: 1000
  },
  {
    id: 2,
    account_id: 5,
    credit: 1500
  },
  {
    id: 3,
    account_id: 8,
    debit: 500
  }
]};

var debitSum = _.reduce(data.accounts, function(sum, account) {
  return (account.debit || 0) + sum;
}, 0);

var creditSum = _.reduce(data.accounts, function(sum, account) {
  return (account.credit || 0) + sum;
}, 0);

console.log('Debit: ' + debitSum + '; Credit: ' + creditSum);

if (debitSum !== creditSum) {
  console.log('Debit and credit are not equal!');
} else {
  console.log('All ok');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>

【讨论】:

  • 谢谢。我明白你的意思了。但是我正在为这个项目使用 API。这就是为什么我想在服务器端实现验证。不在客户端。这就是为什么我认为我可以通过 laravel 的自定义验证来实现这一点。
猜你喜欢
  • 2015-02-20
  • 2022-01-07
  • 2021-02-13
  • 2020-01-02
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 2013-08-25
相关资源
最近更新 更多