So verwenden Sie das Bundle League/Csv richtig [geschlossen]Php

PHP-Programmierer chatten hier
Anonymous
 So verwenden Sie das Bundle League/Csv richtig [geschlossen]

Post by Anonymous »

Ich versuche, mit dem League/csv-Bundle eine Option zu erstellen, mit der Benutzer über eine Dateiauswahlschnittstelle eine CSV-Datei in die Datenbank der Website einfügen können.
https://csv.thephpleague.com/9.0/
Ich habe es geschafft, die ersten Schritte zu unternehmen, nämlich einen Befehl zu erstellen, die CSV-Datei zu lesen und ein „Echo“ darauf auszuführen.

Code: Select all

protected function execute(
InputInterface $input,
OutputInterface $output
): int {

$io = new SymfonyStyle($input, $output);
$io->title('Import CSV ...');

$csv = Reader::from('src/Data/testuser.csv', 'r');
$csv->setHeaderOffset(0);
$csv->setEscape('');
$records = $csv->getRecords();
echo $csv->toString();

$io->success('Great CSV in DB !');

return Command::SUCCESS;
}
Was als nächstes kommt, wird mit der Verwendung eines foreach kompliziert. Ich habe im Internet einige „Lösungen“ gefunden, aber die meisten scheinen veraltet zu sein.

Code: Select all

   foreach ($records as $record){
$user = (new User())
->setName($record['name'])
->setSurname($record['surname'])
->setEmail($record['email'])
->setRoles($record['roles'])
->setPlainPassword($record['plainPassword'])
;
$this->em->persist($user);
}
$this->em->flush();
Ich habe in der Dokumentation über die Verwendung von PDOStatement gelesen, aber das hat mich verwirrt. Ich habe ein Video von jemandem gesehen, der dieses Bundle ohne PDO verwendet, aber das Video ist 8 Jahre alt.
UPDATE VOM 12.02.25:
Ich habe alle Antworten hier gelesen und danke Ihnen vielmals für Ihre Hilfe!
Leider denke ich, dass das Problem in der Verbindung zwischen der CSV und der Datenbank liegt, wahrscheinlich auf Entitätsebene, oder vielleicht in der Transkription von CSV in die Datenbank? Vielleicht das „;“?
Ich habe nach Ryans Antwort ein paar Tests durchgeführt

Code: Select all

foreach ($records as $record){
$user = (new User())
->setName($record['name'] ?? '')
->setSurname($record['surname'] ?? '')
->setEmail($record['email'] ?? '')
->setRoles($record['roles'] ?? [' '])
->setPlainPassword($record['plainPassword'] ?? ' ')
;
$this->em->persist($user);

if (++$i % 50 === 0) {
$this->em->flush();
$this->em->clear();}}
Ich erhalte etwas in meiner Datenbank, aber nur leere Felder! Warum wird der Inhalt meiner CSV-Datei nicht zurückgegeben?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post