Skip to content

Change event csv data - #38

Open
Sioweb wants to merge 2 commits into
markocupic:5.5.xfrom
Sioweb:Sioweb-change-event-csv-data
Open

Sioweb wants to merge 2 commits into
markocupic:5.5.xfrom
Sioweb:Sioweb-change-event-csv-data

Conversation

@Sioweb

@Sioweb Sioweb commented Oct 12, 2026

Copy link
Copy Markdown
Contributor

$csvRecord beinhaltet aktuell nur den letzten Eintrag in der CSV Datei, wegen des For-Loops. Daher habe ich hier nochmal alle Einträge extra in ein Array gepackt, damit die gesamte Zeile in den Events verfügbar ist.

Ich brauche das bspw. damit ich Felder, die nicht konfiguriert sind, nochmal gesondert behandeln kann.

$csvRecord beinhaltet nur den letzten Eintrag in der CSV Datei, wegen des For-Loops. Daher habe ich hier nochmal alle Einträge extra in ein Array gepackt, damit die gesamte Zeile in den Events verfügbar ist.

Ich brauche das bspw. damit ich Felder, die nicht konfiguriert sind, nochmal gesondert behandeln kann.
Fix missing variable
@Sioweb Sioweb changed the title Sioweb change event csv data Change event csv data Oct 12, 2026
@markocupic

Copy link
Copy Markdown
Owner

Danke für den PR und fürs Aufspüren! Du hast völlig recht: In der zweiten Schleife wird $csvRecord übergeben, und das enthält dort nur noch die letzte CSV-Zeile. Alle Row-Events bekommen also die falschen Daten. Das ist ein Bug.

Zwei Punkte möchte ich aber anders lösen:

Zuordnung über den Iterator-Key: $csvRecordsPerLine ist mit dem Offset von League\Csv indexiert, ausgelesen wird aber mit $currentLine, also unserem eigenen Zähler. Im Normalfall sind beide gleich. League\Csv überspringt aber leere Zeilen und behält dabei die Original-Offsets. Bei einer CSV mit Leerzeile laufen die beiden Zähler auseinander. Die Events bekommen dann die falsche Zeile oder null, was zu einem TypeError führt und die Zeile als Fehler im Log landen lässt. Sicherer ist es, direkt nach ++$this->currentLine mit genau diesem Zähler zu speichern, wie bei $importData.
Semantik von getLineAsArray(): Bisher liefert der Getter den gefilterten Datensatz (getrimmt, ohne leere Werte, nur ausgewählte Felder). PreValidateWidgetEvent tut das weiterhin. Wenn die Row-Events neu die rohe Zeile liefern, ändert sich das Verhalten für bestehende Listener stillschweigend, und die Events sind untereinander inkonsistent.

Mein Vorschlag: getLineAsArray() liefert wieder den gefilterten Datensatz, jetzt aber pro Zeile korrekt. Dazu kommt ein neuer Getter getRawLineAsArray() mit der kompletten, unbearbeiteten Zeile inklusive nicht konfigurierter Spalten. Das sollte genau deinen Use Case abdecken. Der neue Konstruktor-Parameter ist optional und steht am Ende, also BC-sicher.

Auf diesem Branch hätte ich meinen Gegenvorschlag bereit:
https://github.com/markocupic/import-from-csv-bundle/tree/fix/row-event-csv-record
Magst du mal testen?

@Sioweb

Sioweb commented Oct 12, 2026

Copy link
Copy Markdown
Contributor Author

Ja mega, funktioniert bei mir mit getRawLineAsArray()!

@markocupic

Copy link
Copy Markdown
Owner

Super! Löst das dein pid Problem hier:
#33 (comment)

@Sioweb

Sioweb commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor Author

Das ist nicht mein Problem, kann ich nicht sagen. Ich habe nur ein paar Felder in der CSV, die nicht mit der Datenbank matchen.

Ich habe ein RowWizard Feld "tz_attributes", wo ich angeben kann, welche Felder aus der CSV zusätzlich in diesen RowWizard gespeichert werden sollen. Mehr nicht.

Falls das nicht zu viel Schnickschnack ist, kann ich das auch gerne in einen PR packen - Setzt halt voraus, dass die Ziel-Tabelle ein Feld mit RowWizard dafür hat.

Bildschirmfoto 2026-10-13 um 09 02 27

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants