4 votes

Yii - Comment charger un csv pour le sauvegarder dans la base de données ?

Je n'arrive pas à comprendre comment lire le fichier CSV que j'ai téléchargé, il me manque probablement quelque chose dans le code de mon contrôleur.

  public function actionImport() {
    $model = new Produtos;
    $this->render('import', array('model' => $model) );

    if( isset($_FILES['csv_file']) ) {

      $handle = fopen($_FILES['csv_file']['tmp_name'], 'r');

      if ($handle) {
        while( ($line = fgetcsv($handle, 1000, ";")) != FALSE) {
            $model->codigo          = $line[0];
            $model->nome            = $line[1];
            $model->descricao       = $line[2];
            $model->stock           = $line[3];
            $model->data_reposicao  = $line[4];

            $model->save();
        }        
      }
      fclose($handle);
    }

  }

Cela ne me permet d'enregistrer que la dernière ligne du fichier CSV... Un peu d'aide, s'il vous plaît !

Toute aide sera très appréciée.

Merci de votre attention.

0voto

Shahzad Malik Points 53

Je sais que c'est un vieux post, mais je viens de tomber sur ceci et je voulais juste aider quelqu'un qui pourrait avoir le même problème (le problème n'est pas avec le CSV ou le téléchargement de fichiers).

Le problème est lié à la façon dont Yii gère les sauvegardes

Vous devez définir l'attribut isNewRecord à true et la clé primaire à NULL de l'objet modèle avant d'enregistrer pour enregistrer un nouvel enregistrement à chaque fois.

$model->PRIMARYKEYCOLUMN = NULL; //Replace PRIMARYKEYCOLUMN with the name of column
$model->isNewRecord = true;
$model->save();

Vous devez effectuer l'étape ci-dessus chaque fois que vous enregistrez des lignes dans une boucle.

-1voto

$handle = fopen($_FILES['Userimportcsv']['tmp_name']['csv_file'], 'r');
if($handle) {                        
    $row = 1;
    while( ($line = fgetcsv($handle, 1000, ",")) != FALSE) {
        if($row>1) {    
          $newModel = new Countries;
          $newModel->countryName       = $line[0];
          $newModel->status            = $line[1];
          $newModel->save();
        } 
        $row++;                     
    }                       
}
fclose($handle);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X