[RESOLU] Symfony - Doctrine Import base existante

Mammouth du PHP | 19672 Messages

05 mai 2021, 11:38

Salut tout le monde,
voilà bien longtemps que je n'ai plus posté ici et encore plus longtemps que je n'ai pas posé de question.

Je rencontre un problème avec Doctrine dans un projet : je tente de me mettre à Symfony et plutôt que de créer un projet vide, je reprends un petit site existant. J'ai donc déjà une base de données avec un contenu. Je ne veux pas toucher à cette partie, j'ai donc besoin que tout ce qui est Entity et Repository soit généré à partir de ma base. Je fais ça avec la commande :

Code : Tout sélectionner

php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity

En lançant l'import avec un mode plus verbeux, j'obtiens ceci :

Code : Tout sélectionner

#$ php bin/console doctrine:mapping:import -vvv "App\Entity" annotation --path=src/Entity 11:18:21 INFO [php] User Deprecated: Doctrine\ORM\Tools\Export\ClassMetadataExporter is deprecated and will be removed in Doctrine ORM 3.0 [ "exception" => ErrorException { #message: "User Deprecated: Doctrine\ORM\Tools\Export\ClassMetadataExporter is deprecated and will be removed in Doctrine ORM 3.0" #code: 0 #file: "./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php" #line: 48 #severity: E_USER_DEPRECATED trace: { ./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php:48 { …} ./vendor/doctrine/doctrine-bundle/Command/ImportMappingDoctrineCommand.php:122 { …} ./vendor/symfony/console/Command/Command.php:256 { …} ./vendor/symfony/console/Application.php:989 { …} ./vendor/symfony/framework-bundle/Console/Application.php:96 { …} ./vendor/symfony/console/Application.php:290 { …} ./vendor/symfony/framework-bundle/Console/Application.php:82 { …} ./vendor/symfony/console/Application.php:166 { …} ./bin/console:43 { › $application = new Application($kernel); › $application->run($input); › } } } ] 11:18:21 INFO [php] User Deprecated: Doctrine\ORM\Tools\Export\Driver\AnnotationExporter is deprecated and will be removed in Doctrine ORM 3.0 [ "exception" => ErrorException { #message: "User Deprecated: Doctrine\ORM\Tools\Export\Driver\AnnotationExporter is deprecated and will be removed in Doctrine ORM 3.0" #code: 0 #file: "./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php" #line: 65 #severity: E_USER_DEPRECATED trace: { ./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php:65 { …} ./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php:82 { …} ./vendor/doctrine/doctrine-bundle/Command/ImportMappingDoctrineCommand.php:123 { …} ./vendor/symfony/console/Command/Command.php:256 { …} ./vendor/symfony/console/Application.php:989 { …} ./vendor/symfony/framework-bundle/Console/Application.php:96 { …} ./vendor/symfony/console/Application.php:290 { …} ./vendor/symfony/framework-bundle/Console/Application.php:82 { …} ./vendor/symfony/console/Application.php:166 { …} ./bin/console:43 { › $application = new Application($kernel); › $application->run($input); › } } } ] 11:18:21 INFO [php] User Deprecated: Doctrine\ORM\Tools\EntityGenerator is deprecated and will be removed in Doctrine ORM 3.0 [ "exception" => ErrorException { #message: "User Deprecated: Doctrine\ORM\Tools\EntityGenerator is deprecated and will be removed in Doctrine ORM 3.0" #code: 0 #file: "./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/EntityGenerator.php" #line: 377 #severity: E_USER_DEPRECATED trace: { ./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/EntityGenerator.php:377 { …} ./vendor/doctrine/doctrine-bundle/Command/DoctrineCommand.php:40 { …} ./vendor/doctrine/doctrine-bundle/Command/ImportMappingDoctrineCommand.php:127 { …} ./vendor/symfony/console/Command/Command.php:256 { …} ./vendor/symfony/console/Application.php:989 { …} ./vendor/symfony/framework-bundle/Console/Application.php:96 { …} ./vendor/symfony/console/Application.php:290 { …} ./vendor/symfony/framework-bundle/Console/Application.php:82 { …} ./vendor/symfony/console/Application.php:166 { …} ./bin/console:43 { › $application = new Application($kernel); › $application->run($input); › } } } ] Database does not have any mapping information.
Donc en somme, Doctrine tente d'utiliser des classes obsolètes. Et j'ignore totalement comment sortir de ce problème. Si quelqu'un a des idées à me suggérer, ça fait presque deux jours que je suis la-dessus, à fouiller Internet pour trouver une solution. Merci d'avance.

Note : j'ai omis d'indiquer quelques détails sur mon environnement :
OS : Debian
Symfony 5.2.7
DB : MariaDB 15.1
Serveur : Apache 2.4.41;
PHP 7.4.3
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Mammouth du PHP | 1609 Messages

05 mai 2021, 12:19

Salut, je pense que c'est pas grave en soit que les classes soient dépréciées, c'est juste qu'ils vont devoir mettre à jour ces classes d'ici la prochaine version majeur.

La apparemment le problème est qu'aucun information de mapping n'est trouvée.

En cherchant vite fait je suis tombé la dessus, attention c'est du symfony 2 mais ça semble être un problème similaire.

https://stackoverflow.com/questions/306 ... 2-doctrine
Développeur web depuis + de 20 ans

Mammouth du PHP | 19672 Messages

05 mai 2021, 12:21

Petit ajout : me disant que j'avais peut-être oublié une étape, j'ai utilisé une autre commande préalable avant de relancer le mapping :

J'ai commencé par importer la base

Code : Tout sélectionner

$ php bin/console doctrine:database:import /chemin_vers_mon_fichier.sql
Et de fait, ça a dû mettre en place des informations :

Code : Tout sélectionner

Processing file '/chemin_vers_mon_fichier.sql'... OK!
La suite me montre les mêmes erreurs, mais les Entity ont été créés :

Code : Tout sélectionner

#$ php bin/console doctrine:mapping:import -vvv "App\Entity" annotation --path=src/Entity 12:13:03 INFO [php] User Deprecated: Doctrine\ORM\Tools\Export\ClassMetadataExporter is deprecated and will be removed in Doctrine ORM 3.0 [ "exception" => ErrorException { #message: "User Deprecated: Doctrine\ORM\Tools\Export\ClassMetadataExporter is deprecated and will be removed in Doctrine ORM 3.0" #code: 0 #file: "./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php" #line: 48 #severity: E_USER_DEPRECATED trace: { ./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php:48 { …} ./vendor/doctrine/doctrine-bundle/Command/ImportMappingDoctrineCommand.php:122 { …} ./vendor/symfony/console/Command/Command.php:256 { …} ./vendor/symfony/console/Application.php:989 { …} ./vendor/symfony/framework-bundle/Console/Application.php:96 { …} ./vendor/symfony/console/Application.php:290 { …} ./vendor/symfony/framework-bundle/Console/Application.php:82 { …} ./vendor/symfony/console/Application.php:166 { …} ./bin/console:43 { › $application = new Application($kernel); › $application->run($input); › } } } ] 12:13:03 INFO [php] User Deprecated: Doctrine\ORM\Tools\Export\Driver\AnnotationExporter is deprecated and will be removed in Doctrine ORM 3.0 [ "exception" => ErrorException { #message: "User Deprecated: Doctrine\ORM\Tools\Export\Driver\AnnotationExporter is deprecated and will be removed in Doctrine ORM 3.0" #code: 0 #file: "./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php" #line: 65 #severity: E_USER_DEPRECATED trace: { ./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php:65 { …} ./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php:82 { …} ./vendor/doctrine/doctrine-bundle/Command/ImportMappingDoctrineCommand.php:123 { …} ./vendor/symfony/console/Command/Command.php:256 { …} ./vendor/symfony/console/Application.php:989 { …} ./vendor/symfony/framework-bundle/Console/Application.php:96 { …} ./vendor/symfony/console/Application.php:290 { …} ./vendor/symfony/framework-bundle/Console/Application.php:82 { …} ./vendor/symfony/console/Application.php:166 { …} ./bin/console:43 { › $application = new Application($kernel); › $application->run($input); › } } } ] 12:13:03 INFO [php] User Deprecated: Doctrine\ORM\Tools\EntityGenerator is deprecated and will be removed in Doctrine ORM 3.0 [ "exception" => ErrorException { #message: "User Deprecated: Doctrine\ORM\Tools\EntityGenerator is deprecated and will be removed in Doctrine ORM 3.0" #code: 0 #file: "./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/EntityGenerator.php" #line: 377 #severity: E_USER_DEPRECATED trace: { ./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/EntityGenerator.php:377 { …} ./vendor/doctrine/doctrine-bundle/Command/DoctrineCommand.php:40 { …} ./vendor/doctrine/doctrine-bundle/Command/ImportMappingDoctrineCommand.php:127 { …} ./vendor/symfony/console/Command/Command.php:256 { …} ./vendor/symfony/console/Application.php:989 { …} ./vendor/symfony/framework-bundle/Console/Application.php:96 { …} ./vendor/symfony/console/Application.php:290 { …} ./vendor/symfony/framework-bundle/Console/Application.php:82 { …} ./vendor/symfony/console/Application.php:166 { …} ./bin/console:43 { › $application = new Application($kernel); › $application->run($input); › } } } ] Importing mapping information from "default" entity manager > writing src/Entity/TAccesAdm.php > writing src/Entity/TImagesImg.php > writing src/Entity/TPagePge.php > writing src/Entity/TRepertoiresRep.php
Mon répertoire Repository reste vide, mais ça, c'est peut-être normal. Cependant, les erreurs restent.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 19672 Messages

05 mai 2021, 12:24

Salut, je pense que c'est pas grave en soit que les classes soient dépréciées, c'est juste qu'ils vont devoir mettre à jour ces classes d'ici la prochaine version majeur.

La apparemment le problème est qu'aucun information de mapping n'est trouvée.

En cherchant vite fait je suis tombé la dessus, attention c'est du symfony 2 mais ça semble être un problème similaire.

https://stackoverflow.com/questions/306 ... 2-doctrine
Salut Saian, merci pour la réponse.
Qu'ils doivent mettre à jour leur code, m'indiffère un peu, c'est maintenant que j,ai besoin que ça fonctionne.
Quant aux exemples avec des version précédentes de Symfony, ça ne m'avance pas beaucoup, l'architecture a été notablement modifiée depuis et plus grand chose ne correspond. Enfin bon, je continuer à fouiller. Avec le petit début de progrès que je viens de faire, je vais sans doute pouvoir faire un peu évoluer mon développement.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Mammouth du PHP | 1609 Messages

05 mai 2021, 12:31

Ça t'indiffère peut être mais ce que je t'explique c'est que ces erreurs n’empêchent pas le code de fonctionner, c'est juste des alertes. D'après le message d'erreur de ton premier message "Database does not have any mapping information." le problème vient du mapping qui n'est pas défini et si symfony a beaucoup évolué depuis la version 2, la configuration de la base de données elle n'a pas tant évolué que ça. Bref si tes entités sont maintenant bien générées, quel est le problème ?
Développeur web depuis + de 20 ans

Mammouth du PHP | 19672 Messages

05 mai 2021, 12:41

Ça t'indiffère peut être mais ce que je t'explique c'est que ces erreurs n’empêchent pas le code de fonctionner, c'est juste des alertes. D'après le message d'erreur de ton premier message "Database does not have any mapping information." le problème vient du mapping qui n'est pas défini et si symfony a beaucoup évolué depuis la version 2, la configuration de la base de données elle n'a pas tant évolué que ça. Bref si tes entités sont maintenant bien générées, quel est le problème ?
Ben non, ce n'est pas juste une erreur : ça lève une exception et rien ne se passe comme ça devrait sans pour autant m'indiquer de piste pour résoudre ce problème. Mais bon, effectivement, mes entités ont maintenant été créées, je vais mettre ce sujet en « Résolu» et tâcher d'avancer à partir de ça.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Mammouth du PHP | 1609 Messages

05 mai 2021, 12:48

Sincèrement, au lieu de bloquer sur ces messages d'information (comme indiqué : INFO \[php\] User Deprecated, qui veut juste dire que tu ne dois pas les utiliser dans tes codes si tu comptes mettre à jour le symfony plus tard ou réutiliser ces codes car elles vont être retirées), intéresses toi au message tout en bas : "Database does not have any mapping information.".

De ce que j'ai pu trouver en creusant un peu plus, si tout est bien configuré, cela peut potentiellement venir d'un type de colonne qui n'est pas supporté par défaut par doctrine. Cela pourrait résulter dans le message d'erreur que tu obtiens (Database does not have any mapping information) s'il n'y a pas de configuration pour dire à doctrine comment mapper ce type de colonne. Après c'est sur que le message est un peu laconique, il pourrait préciser le type non supporté.

Ici par exemple tu peux trouver la liste des mapping doctrine. Si tu as un type de colonne qui n'est pas dedans alors il faut que tu ajoutes une configuration pour le supporter.
https://www.doctrine-project.org/projec ... ping-types

PS : pour ces exceptions, par exemple si tu regardes la première exception tu verras que c'est juste une alerte dans le __construct. Ça n'empêche pas le code de poursuivre, sinon tu n'aurais pas d'autre sortie en dessous.
// ClassMetadataExporter
public function __construct()
    {
        @trigger_error(self::class . ' is deprecated and will be removed in Doctrine ORM 3.0', E_USER_DEPRECATED);
    }
Pareil pour la deuxième :
// AbstractExporter
public function __construct($dir = null)
    {
        @trigger_error(static::class . ' is deprecated and will be removed in Doctrine ORM 3.0', E_USER_DEPRECATED);

        $this->_outputDir = $dir;
    }
A vérifier mais je suis à peu près sur qu'avec le @ le code ne s'arrête pas au @trigger_error mais continue.
Développeur web depuis + de 20 ans

Mammouth du PHP | 19672 Messages

05 mai 2021, 14:11

Sincèrement, au lieu de bloquer sur ces messages d'information ...
Encore une fois, ce n'était pas juste un message d'information mais une exception qui bloque la suite du déroulement normal du code.

Je vais regarder du coté des types de colonnes, mais je doute que ce soit bloquant à ce niveau, c'est une petite base avec 4 bêtes tables tout ce qu'il y a de plus ordinaire. Quant à Symfony, c'est la dernière version, donc aucune mise à jour ne mettra Doctrine à jour.

Pour l'instant, mon répertoire Entity a bien été peuplé, maintenant, je bloque sur la création dans Repository qui aurait dû être automatique aussi.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Mammouth du PHP | 1609 Messages

05 mai 2021, 18:47

Et pourtant ces exceptions ne bloquent pas l'exécution du script ce sont juste des notices d'information. Je viens de faire le test pour être sûr de ce que je dis. D'ailleurs si tu enlèves le -vvv de la commande ces messages d'informations ne s'afficheront pas. Je le redis comme tout à l'heure, ce sont juste des alertes de doctrine pour prévenir que ces classes seront retirées dans la version 3.0 et que donc il ne faut pas les utiliser si on compte utiliser le même code avec la futur version de Doctrine.

J'ai modifié la classe qui déclenche la première exception :
//Doctrine\ORM\Tools\Export\ClassMetadataExporter
    public function __construct()
    {
        @trigger_error(self::class . ' is deprecated and will be removed in Doctrine ORM 3.0', E_USER_DEPRECATED);
        echo "\n\nerror triggered but that does not stop the script!!!\n\n";
    }

Mon echo s'affiche dans la sortie et donc le script se poursuit bel et bien :
php bin/console doctrine:mapping:import -vvv "App\Entity" annotation --path=src/Entity
18:36:50 INFO      [php] User Deprecated: Doctrine\ORM\Tools\Export\ClassMetadataExporter is deprecated and will be removed in Doctrine ORM 3.0
[
  "exception" => ErrorException {
    #message: "User Deprecated: Doctrine\ORM\Tools\Export\ClassMetadataExporter is deprecated and will be removed in Doctrine ORM 3.0"
    #code: 0
    #file: "./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php"
    #line: 48
    #severity: E_USER_DEPRECATED
    trace: {
      ./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php:48 { …}
      ./vendor/doctrine/doctrine-bundle/Command/ImportMappingDoctrineCommand.php:122 { …}
      ./vendor/symfony/console/Command/Command.php:256 { …}
      ./vendor/symfony/console/Application.php:989 { …}
      ./vendor/symfony/framework-bundle/Console/Application.php:96 { …}
      ./vendor/symfony/console/Application.php:290 { …}
      ./vendor/symfony/framework-bundle/Console/Application.php:82 { …}
      ./vendor/symfony/console/Application.php:166 { …}
      ./bin/console:43 {
        › $application = new Application($kernel);
        › $application->run($input);
        › 
      }
    }
  }
]


error triggered but that does not stop the script!!!

18:36:50 INFO      [php] User Deprecated: Doctrine\ORM\Tools\Export\Driver\AnnotationExporter is deprecated and will be removed in Doctrine ORM 3.0
[
  "exception" => ErrorException {
    #message: "User Deprecated: Doctrine\ORM\Tools\Export\Driver\AnnotationExporter is deprecated and will be removed in Doctrine ORM 3.0"
    #code: 0
    #file: "./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php"
    #line: 65
    #severity: E_USER_DEPRECATED
    trace: {
      ./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php:65 { …}
      ./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php:83 { …}
      ./vendor/doctrine/doctrine-bundle/Command/ImportMappingDoctrineCommand.php:123 { …}
      ./vendor/symfony/console/Command/Command.php:256 { …}
      ./vendor/symfony/console/Application.php:989 { …}
      ./vendor/symfony/framework-bundle/Console/Application.php:96 { …}
      ./vendor/symfony/console/Application.php:290 { …}
      ./vendor/symfony/framework-bundle/Console/Application.php:82 { …}
      ./vendor/symfony/console/Application.php:166 { …}
      ./bin/console:43 {
        › $application = new Application($kernel);
        › $application->run($input);
        › 
      }
    }
  }
]
18:36:50 INFO      [php] User Deprecated: Doctrine\ORM\Tools\EntityGenerator is deprecated and will be removed in Doctrine ORM 3.0
[
  "exception" => ErrorException {
    #message: "User Deprecated: Doctrine\ORM\Tools\EntityGenerator is deprecated and will be removed in Doctrine ORM 3.0"
    #code: 0
    #file: "./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/EntityGenerator.php"
    #line: 377
    #severity: E_USER_DEPRECATED
    trace: {
      ./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/EntityGenerator.php:377 { …}
      ./vendor/doctrine/doctrine-bundle/Command/DoctrineCommand.php:40 { …}
      ./vendor/doctrine/doctrine-bundle/Command/ImportMappingDoctrineCommand.php:127 { …}
      ./vendor/symfony/console/Command/Command.php:256 { …}
      ./vendor/symfony/console/Application.php:989 { …}
      ./vendor/symfony/framework-bundle/Console/Application.php:96 { …}
      ./vendor/symfony/console/Application.php:290 { …}
      ./vendor/symfony/framework-bundle/Console/Application.php:82 { …}
      ./vendor/symfony/console/Application.php:166 { …}
      ./bin/console:43 {
        › $application = new Application($kernel);
        › $application->run($input);
        › 
      }
    }
  }
]
Importing mapping information from "default" entity manager
  > writing src/Entity/YbAuthor.php
  > writing src/Entity/YbCategory.php
  > writing src/Entity/YbMedia.php
  > writing src/Entity/YbMediaAuthor.php
  > writing src/Entity/YbxCategory.php
  > writing src/Entity/YbxMedia.php

Sans le -vvv ça donne :
php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity


error triggered but that does not stop the script!!!

Importing mapping information from "default" entity manager
  > writing src/Entity/YbAuthor.php
  > writing src/Entity/YbCategory.php
  > writing src/Entity/YbMedia.php
  > writing src/Entity/YbMediaAuthor.php
  > writing src/Entity/YbxCategory.php
  > writing src/Entity/YbxMedia.php

En fait le problème était simplement que ta base était vide. Une fois les tables importées tu n'as en fait plus de problème, juste des alertes sans conséquence, rien d'anormal.

Sinon la commande doctrine:mapping:import ne génère pas les repository, elle génère uniquement les entités et encore sans les getter et setter pour lesquels il faut utiliser une commande supplémentaire.

Ceci dit tu peux très bien créer les fichiers repository toi même, tu n'auras de tout façon pas de méthode spécifique pour le moment et les repostiroy ne sont pas obligatoires.
Développeur web depuis + de 20 ans

Mammouth du PHP | 19672 Messages

06 mai 2021, 09:58

Et pourtant ces exceptions ne bloquent pas l'exécution du script ce sont juste des notices d'information. Je viens de faire le test pour être sûr de ce que je dis. D'ailleurs si tu enlèves le -vvv de la commande ces messages d'informations ne s'afficheront pas. Je le redis comme tout à l'heure, ce sont juste des alertes de doctrine pour prévenir que ces classes seront retirées dans la version 3.0 et que donc il ne faut pas les utiliser si on compte utiliser le même code avec la futur version de Doctrine.

J'ai modifié la classe qui déclenche la première exception :
//Doctrine\ORM\Tools\Export\ClassMetadataExporter
    public function __construct()
    {
        @trigger_error(self::class . ' is deprecated and will be removed in Doctrine ORM 3.0', E_USER_DEPRECATED);
        echo "\n\nerror triggered but that does not stop the script!!!\n\n";
    }

Mon echo s'affiche dans la sortie et donc le script se poursuit bel et bien :
php bin/console doctrine:mapping:import -vvv "App\Entity" annotation --path=src/Entity
18:36:50 INFO      [php] User Deprecated: Doctrine\ORM\Tools\Export\ClassMetadataExporter is deprecated and will be removed in Doctrine ORM 3.0
[
  "exception" => ErrorException {
    #message: "User Deprecated: Doctrine\ORM\Tools\Export\ClassMetadataExporter is deprecated and will be removed in Doctrine ORM 3.0"
    #code: 0
    #file: "./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php"
    #line: 48
    #severity: E_USER_DEPRECATED
    trace: {
      ./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php:48 { …}
      ./vendor/doctrine/doctrine-bundle/Command/ImportMappingDoctrineCommand.php:122 { …}
      ./vendor/symfony/console/Command/Command.php:256 { …}
      ./vendor/symfony/console/Application.php:989 { …}
      ./vendor/symfony/framework-bundle/Console/Application.php:96 { …}
      ./vendor/symfony/console/Application.php:290 { …}
      ./vendor/symfony/framework-bundle/Console/Application.php:82 { …}
      ./vendor/symfony/console/Application.php:166 { …}
      ./bin/console:43 {
        › $application = new Application($kernel);
        › $application->run($input);
        › 
      }
    }
  }
]


error triggered but that does not stop the script!!!

18:36:50 INFO      [php] User Deprecated: Doctrine\ORM\Tools\Export\Driver\AnnotationExporter is deprecated and will be removed in Doctrine ORM 3.0
[
  "exception" => ErrorException {
    #message: "User Deprecated: Doctrine\ORM\Tools\Export\Driver\AnnotationExporter is deprecated and will be removed in Doctrine ORM 3.0"
    #code: 0
    #file: "./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php"
    #line: 65
    #severity: E_USER_DEPRECATED
    trace: {
      ./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php:65 { …}
      ./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php:83 { …}
      ./vendor/doctrine/doctrine-bundle/Command/ImportMappingDoctrineCommand.php:123 { …}
      ./vendor/symfony/console/Command/Command.php:256 { …}
      ./vendor/symfony/console/Application.php:989 { …}
      ./vendor/symfony/framework-bundle/Console/Application.php:96 { …}
      ./vendor/symfony/console/Application.php:290 { …}
      ./vendor/symfony/framework-bundle/Console/Application.php:82 { …}
      ./vendor/symfony/console/Application.php:166 { …}
      ./bin/console:43 {
        › $application = new Application($kernel);
        › $application->run($input);
        › 
      }
    }
  }
]
18:36:50 INFO      [php] User Deprecated: Doctrine\ORM\Tools\EntityGenerator is deprecated and will be removed in Doctrine ORM 3.0
[
  "exception" => ErrorException {
    #message: "User Deprecated: Doctrine\ORM\Tools\EntityGenerator is deprecated and will be removed in Doctrine ORM 3.0"
    #code: 0
    #file: "./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/EntityGenerator.php"
    #line: 377
    #severity: E_USER_DEPRECATED
    trace: {
      ./vendor/doctrine/orm/lib/Doctrine/ORM/Tools/EntityGenerator.php:377 { …}
      ./vendor/doctrine/doctrine-bundle/Command/DoctrineCommand.php:40 { …}
      ./vendor/doctrine/doctrine-bundle/Command/ImportMappingDoctrineCommand.php:127 { …}
      ./vendor/symfony/console/Command/Command.php:256 { …}
      ./vendor/symfony/console/Application.php:989 { …}
      ./vendor/symfony/framework-bundle/Console/Application.php:96 { …}
      ./vendor/symfony/console/Application.php:290 { …}
      ./vendor/symfony/framework-bundle/Console/Application.php:82 { …}
      ./vendor/symfony/console/Application.php:166 { …}
      ./bin/console:43 {
        › $application = new Application($kernel);
        › $application->run($input);
        › 
      }
    }
  }
]
Importing mapping information from "default" entity manager
  > writing src/Entity/YbAuthor.php
  > writing src/Entity/YbCategory.php
  > writing src/Entity/YbMedia.php
  > writing src/Entity/YbMediaAuthor.php
  > writing src/Entity/YbxCategory.php
  > writing src/Entity/YbxMedia.php

Sans le -vvv ça donne :
php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity


error triggered but that does not stop the script!!!

Importing mapping information from "default" entity manager
  > writing src/Entity/YbAuthor.php
  > writing src/Entity/YbCategory.php
  > writing src/Entity/YbMedia.php
  > writing src/Entity/YbMediaAuthor.php
  > writing src/Entity/YbxCategory.php
  > writing src/Entity/YbxMedia.php

En fait le problème était simplement que ta base était vide. Une fois les tables importées tu n'as en fait plus de problème, juste des alertes sans conséquence, rien d'anormal.

Sinon la commande doctrine:mapping:import ne génère pas les repository, elle génère uniquement les entités et encore sans les getter et setter pour lesquels il faut utiliser une commande supplémentaire.

Ceci dit tu peux très bien créer les fichiers repository toi même, tu n'auras de tout façon pas de méthode spécifique pour le moment et les repostiroy ne sont pas obligatoires.
Saian, c'est sympa de répondre, mais si c'est pour me raconter n'importe quoi, tu peux t'abstenir. Je ne suis pas un débutant en PHP et je suis accessoirement un des plus anciens membres de ce forum. Alors arrête de me prendre pour un con.

Ma base n'était pas vide, si tu avais lu correctement mon post de départ, tu l'aurais su.
Quant au paramètre « -vvv » dans ma ligne de commande, bien évidemment que si je le retire, le message disparaît, il est précisément fait pour l'afficher. Ça ne retire pas l'erreur pour autant. Et le résultat reste le même : mes entités n'étaient pas créées et mes repository non plus.

Après import de la base, les entités ont été créées, mais sans les getters ni les setters, et les repository restent aux abonnés absents. Or j'ai besoin de ces repository parce que j'ai besoin de faire des tris spécifiques non-standards.

Alors arrête de me dire que j'ai tort dans l'interprétation, je me fous des avis des uns et des autres, je cherche une solution pour que ça fonctionne correctement.

C'est pour ça que je ne poste jamais dans les forums, il y a toujours un bougre d'âne pour faire le malin en croyant tout savoir et qui répond à coté de la question.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Mammouth du PHP | 1609 Messages

06 mai 2021, 10:42

Euuuh, c'est toi qui me prends pour un con à me dire que je dis de la merde... n'inverse pas les rôles. Je te démontre que ces "exceptions" ne sont pas bloquantes mais tu ne veux absolument pas le reconnaitre...

C'est pas compliqué, au début bien que tu dis avoir une base ça ne fonctionne pas tu obtiens un message : "Database does not have any mapping information".

A ton deuxième message tu dis avoir utilisé la commande "doctrine:database:import" au préalable, j'imagine donc que la base était vide au départ et que tu viens de l'importer. Et la miracle, quand tu exécutes la commande incriminée au départ "doctrine:mapping:import", les entités sont belle et bien créées.

Interprétation : la base était vide au départ d'où l'erreur, puis une fois la base alimentée par le database import, TOUT VA BIEN.

Maintenant du redis ceci :
Après import de la base, les entités ont été créées, mais sans les getters ni les setters, et les repository restent aux abonnés absents.

Oui et c'est normal. Extrait de la doc...
php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity
This command line tool asks Doctrine to introspect the database and generate new PHP classes with annotation metadata into src/Entity. This generates two files: BlogPost.php and BlogComment.php.

Et c'est exactement ce qu'il se passe chez moi aussi, seule les entités sont générées.

ET la doc poursuis :
Generating the Getters & Setters or PHP Classes

The generated PHP classes now have properties and annotation metadata, but they do not have any getter or setter methods. If you generated XML or YAML metadata, you don’t even have the PHP classes!

To generate the missing getter/setter methods (or to create the classes if necessary), run:

// generates getter/setter methods for all Entities
php bin/console make:entity --regenerate App


// generates getter/setter methods for one specific Entity
php bin/console make:entity --regenerate App\\Entity\\Country

https://symfony.com/doc/current/doctrin ... ering.html

As tu seulement lu mon commentaire jusqu'au bout ?
Sinon la commande doctrine:mapping:import ne génère pas les repository, elle génère uniquement les entités et encore sans les getter et setter pour lesquels il faut utiliser une commande supplémentaire.

Ceci dit tu peux très bien créer les fichiers repository toi même, tu n'auras de tout façon pas de méthode spécifique pour le moment et les repostiroy ne sont pas obligatoires.

Maintenant s'ils te sont nécessaires car tu veux y ajouter des méthodes... code de base d'un repository trouvé dans la documentation...
// src/Repository/ProductRepository.php
namespace App\Repository;

use App\Entity\Product;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;

class ProductRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Product::class);
    }
}

PS : à noter tout de même généralement dans mes projets symfony, les entités pour lesquelles j'ai un repository sont pourvues d'une annotation qui se trouve au dessus de la déclaration de la classe.
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
Je ne sais pas si elle est indispensable mais si ça ne fonctionne pas sans et bien il faut l'ajouter.
Développeur web depuis + de 20 ans

Mammouth du PHP | 19672 Messages

06 mai 2021, 11:00

Euuuh, c'est toi qui me prends pour un con à me dire que je dis de la merde... n'inverse pas les rôles. Je te démontre que ces "exceptions" ne sont pas bloquantes mais tu ne veux absolument pas le reconnaitre...
Bon, ça va bien là. Je sais de quoi je parle. Tu ne me démontres rien du tout et tu ne réponds pas à la question de départ., donc oui, je confirme, tu dis de la merde.
Je me suis appuyé au départ sur un tuto vidéo où réside une différence, il crée ses tables à partir de sa ligne de commande au fur et à mesure, et ça lui crée bien entités ET repository. Partant d'une base existante, je tente d'obtenir le même résultat. Et quoi qu'il en dise au début du tuto, la documentation de Symfony est un foutoir infect, comme la plupart des documentation pour ce genre d'application, mais passons.

Ça a toujours l'air de fonctionner quand on voit ce genre de démonstration, mais bien entendu, c'est fait par des types qui ont une parfaite maîtrise de l'outil qu'ils utilisent et ils oublient toujours les cas d'utilisation qui n'existent plus depuis longtemps sur leur environnement. Et ils n'en font JAMAIS mention. Et bien entendu, quand ça bloque, trouver la solution est une galère sans nom.

Le sujet est clos, comme d'habitude d'ailleurs, et je trouve ma réponse tout seul et par un autre canal. :evil:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Mammouth du PHP | 1609 Messages

06 mai 2021, 11:25

Donc en somme, Doctrine tente d'utiliser des classes obsolètes. Et j'ignore totalement comment sortir de ce problème.
Non doctrine n'utilise pas des classes obsolètes. C'est la commande Symfony qui utilise des classes de Doctrine dépréciées car elles vont disparaître de Doctrine dans la version 3. Ce ne sont pas des exceptions bloquantes mais des alertes d'informations. Et je t'ai bien démontré que le code ne s'arrête pas après le déclenchement de l'erreur, c'est juste toi qui ne veut pas le reconnaître.

Pour le reste toutes tes réponses (pas de repository, pas de getters et de setters) se trouvent dans mes deux précédents messages, mais il faut mettre ton ego de côté et les lire en entier.

On prend du temps pour aider, pour faire des tests et on se fait insulter. Bien la mentalité monsieur je sais de quoi je parle, je demande de l'aide mais en fait j'ai pas besoin car je sais.
Développeur web depuis + de 20 ans

Mammouth du PHP | 19672 Messages

06 mai 2021, 12:03

On prend du temps pour aider, pour faire des tests et on se fait insulter.
S'il y a bien une chose que j'ai apprise sur ce forum, c'est que si on ne se met pas à la place de celui qui pose la question, on a toutes les chances de se vautrer et de faire perdre du temps à la personne qui cherche une réponse.
Et c'est un cas malheureusement extrêmement fréquent sur la plupart des forums.

Le schéma le plus classique est du style :
Qeestion : X
Réponse : Non, tu devrais faire Y
Et c'est exactement la même chose ici. J'ai soulevé un problème précis en indiquant des informations spécifiques, et la réponse ne me sert strictement à rien parce qu'elle ne correspond pas à ce dont j'ai besoin, donc j'ai perdu mon temps.

Point final.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Mammouth du PHP | 1609 Messages

06 mai 2021, 13:03

Et pourtant dès le départ tu pars d'un mauvais postulat. Le problème viendrait des classes dépréciées et dès le départ je t'explique que le problème ne vient pas de la.

Et j'ai également répondu à tes interrogations concernant les repository et les getters et setters.

Bref, vive la mauvaise foi.
Développeur web depuis + de 20 ans