Я объяснил все шаги в комментариях, но я объясню и здесь.
Когда вы пропускаете oop через каждую строку, вам сначала нужно захватить все строки, где поле number
равно 1
, 2
или 3
, какое бы число ни находилось в данный момент в итерации.
В этом случае первые результаты l oop будут:
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
: