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
字段为1
、2
或3
的行,无论数字是多少目前正在迭代中。
在这种情况下,第一个循环结果将是:
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
:
嗨,我正在使用 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
字段为1
、2
或3
的行,无论数字是多少目前正在迭代中。
在这种情况下,第一个循环结果将是:
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
: