laravel 大小网站验证和多列

laravel Maatwebsite validate sum multi column

嗨,我正在使用 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 的总和 return 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 等等 ..

非常感谢

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

当你遍历每一行时,你首先需要抓取所有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($sheet)和return你现在的有,待出口


完整 class:

...
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: