【问题标题】:laravel Maatwebsite validate sum multi columnlaravel Maatwebsite 验证总和多列
【发布时间】:2020-04-21 11:01:31
【问题描述】:

嗨,我正在使用 Maatwebsite 和 laravel,到目前为止一切都很好.. 但我想像这样更新 excel ..

number      date            amount
1           2020-01-01      10
1           2020-01-01      -5
1           2020-01-01      -5
2           2020-02-02      20
2           2020-02-02      -20
3           2020-03-03      50  
3           2020-03-03      -50
3           2020-03-03      40
3           2020-03-03      -40

我想要的是数字 1 的金额的总和返回 0 或结束导入

number      date            amount
1           2020-01-01      10
1           2020-01-01      -5
1           2020-01-01      -5

如何检查 (10 + -5 + -5 == 0) 或失败 对于 2 和 3 等 ..

非常感谢

【问题讨论】:

  • 不清楚你想要什么。您能否添加更多示例以及您的代码?

标签: laravel maatwebsite-excel


【解决方案1】:

我解释了 cmets 中的所有步骤,但我也会在这里解释。

当您遍历每一行时,您首先需要获取number 字段为123 的所有行,无论当前迭代中的数字是多少。

在这种情况下,第一个循环结果将是:

number      date            amount
1           2020-01-01      10
1           2020-01-01      -5
1           2020-01-01      -5

然后将amount 列中的值相加(相加)。

在这种情况下,它的总和是这样的:

10
-5
-5
-----
0

如果答案是不是 0,请取出当前工作表 ($sheet) 并返回您当前拥有的内容,以便导出。


全班:

...
use Maatwebsite\Excel\Concerns\FromArray;

class ExampleExport implements FromArray
{
    public function array() : array
    {
        // EXAMPLE hardcoded data for the purpose of this demo
        $rows = [
            [
                'number' => 1,
                'date' => '2020-01-01',
                'amount' => 10
            ],
            [
                'number' => 1,
                'date' => '2020-01-01',
                'amount' => -5
            ],
            [
                'number' => 1,
                'date' => '2020-01-01',
                'amount' => -5
            ],
            [
                'number' => 2,
                'date' => '2020-02-02',
                'amount' => 20
            ],
            [
                'number' => 2,
                'date' => '2020-02-02',
                'amount' => -20 // <-------- Change this to -21 to test
            ],
            [
                'number' => 3,
                'date' => '2020-03-03',
                'amount' => 50
            ],
            [
                'number' => 3,
                'date' => '2020-03-03',
                'amount' => -50
            ],
            [
                'number' => 3,
                'date' => '2020-03-03',
                'amount' => 40
            ],
            [
                'number' => 3,
                'date' => '2020-03-03',
                'amount' => -40
            ],
        ];

        // EXAMPLE hardcoded data for the purpose of this demo
        $rows = collect($rows);

        // You probably going to get this from your database so should look like this:
        // $rows = \App\Model::all(['number', 'date', 'amount']); // OR below
        // $rows = DB::table('examples')->select(['number', 'date', 'amount'])->get();

        // Blank sheet
        $sheet = [];

        foreach ($rows as $row) {
            // Get all the rows where the `number` field has the same value,
            // for example 1, 2, or 3, then sum the `amount` field (add up).
            //
            // If the amount does not add up to 0, stop and return what you currently got
            if ($rows->where('number', $row['number'])->sum('amount') !== 0) {
                return $sheet;
            }

            // Else, add them to the sheet and continue.
            $sheet[] = $row;
        }

        return $sheet;
    }
}

结果:

amount 加起来等于0

amount 不等于0

【讨论】:

    猜你喜欢
    • 2020-05-16
    • 2019-06-17
    • 2021-11-16
    • 1970-01-01
    • 2018-12-23
    • 2021-01-06
    • 2022-01-07
    • 2019-06-06
    • 2019-01-28
    相关资源
    最近更新 更多