Bonjour,

Voila je rencontre un petit problème avec mon code.

Je veux Générer du contenu par le biais des "Data Fixtures"

Quand j'utilise la méthode avec des valeurs du type => $existantPass[$i]->setContent('my str'), cela fonctionne , mais dès que je veux récupérer les valeurs issue de mon fichier CSV, ça coince , je ne récupère pas les valeurs, pourtant, quand je les dump, ce n'est pas vide....

<?php

namespace PasswordManager\Bundle\PlatformBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use PasswordManager\Bundle\PlatformBundle\Entity\Password as Password;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use PasswordManager\Bundle\PlatformBundle\Controller\PasswordController;

class LoadPassword extends PasswordController implements FixtureInterface
{

    public function load(ObjectManager $manager){

        $csv = fopen(dirname(__FILE__).'/loadexistPass/file.csv', 'r');
        $i = 0;
        while (!feof($csv)) {
            $line = fgetcsv($csv);
            $existantPass[$i] = new Password();
            $existantPass[$i]->setSlug($line[0]);
            $existantPass[$i]->setShared(1);
            $existantPass[$i]->setTitle($line[0]);
            $existantPass[$i]->setUrl($line[0]);
            $existantPass[$i]->setLogin($line[1]);
            $existantPass[$i]->setPassword($line[2]);
            $existantPass[$i]->setContent('my str');
            $manager->persist($existantPass[$i]);

            $i = $i ++;
        }

        fclose($csv);

        $manager->flush();
    }

}

Du coup un belle erreur SQL

[Doctrine\DBAL\Exception\NotNullConstraintViolationException]
An exception occurred while executing 'INSERT INTO password (slug, share
d, date, nbapplications, title, url, login, password, content, updated
at, user_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params ["-5"
, 1, "2018-09-11 16:46:04", 0, null, null, null, null, "my str", null, n
ull]:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'title' can
not be null

2 réponses


Digivia
Réponse acceptée

Ca me parait clair comme erreur, $line[0] est null...
Après si tu veux faire un code "propre", utilise le composant serializer de Symfony pour importer ton csv et le transformer en array php.
Va voir : https://symfony.com/blog/new-in-symfony-3-2-csv-and-yaml-encoders-for-serializer

twog93
Auteur

Merci pour ton retour Digivia, $line[0] n'est pasnull pourant, puisque quand je le dump il vaux qulques chose.. avec serialiser, c'est mieux effectivement merci.