Doctrine/Symfony avec PostgreSQL : paramètres de connexion

Les tables ne semblent pas être visibles

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous !

Aujourd’hui, je me frotte à PostgreSQL. Il y a un serveur (distant) contenant des tables existantes qu’il me faut pouvoir lire avec Doctrine ORM embarqué dans Symfony 4. Il doit y avoir des subtilités qui m’échappent, mais je ne sais absolument pas lesquelles (droits utilisateurs ou configuration Doctrine/Symfony).

Le souci que je rencontre est que malgré le fait que la connexion semble établie, le schéma n’est soit pas trouvé, soit pas le bon. D’une part quand je tente de jeter les bases des entités d’après les tables, il bloque sur une table qui n’a pas de clé primaire. Mais quand je demande de voir ce qu’il y aurait à mettre à jour en ayant créé une entité à la main, il souhaite me recréer la table. J’ai tenté de filtrer pour mettre ne pas lister la table sans clé primaire (elle commence par un caractère particulier), il me dit qu’il n’y a pas de quoi créer des mappings.

Je sais qu’avec PotgreSQL il y a des subtilités sur la casse notamment, et même si j’ai respecté la casse montrée par pgAdmin pour mettre dans @ORM\Table(name="schema.tableName"), ce n’est apparemment pas ainsi qu’il faut faire.

Eest-ce que quelqu’un a déjà travaillé avec succès depuis une base de données PostgreSQL existante en la liant avec Symfony via Doctrine ?

Merci d’avance  :)

+0 -0

Bon, j’ai finalement abandonné la rétro-ingénierie. D’une part, mon filtre n’était pas bon, et d’autre part, l’outil qui détermine le nom de la classe à partir de celui de la table (où, avec PostgreSQL, il y a un nom de schéma devant) ne gère pas les guillemets propres à ce SQL ni le schéma qui ne doit pas y apparaître. J’ai temporairement modifié ça histoire de pouvoir générer les classes, mais même celles-ci ne "reconnaissent" pas les tables…

Edit

J’ai pu constater que les tables étaient retournées sous le format schema."table" lors de la tentative de rétroingénierie. Tout le truc me semblerait de permettre de générer le même genre de format.

J’ai essayé comme suit :

  • name="schema.table"
  • name="schema.`table`"
  • schema="schema", name="table"
  • schema="schema", name="`table`"

Si les accents graves semblent bien permettre de "générer" des guillemets doubles " autour des noms de table, les trois dernières solution ci-dessus génèrent toutes "schema"."table", ce qui ne correspond pas à ce que je voudrais, tandis que la première est prise telle quelle (et un doctrine:schema:update --complete détruirait les tables existantes pour en recréer ce qui semblerait donc en être d’autres dans tous les cas).

+0 -0

J’ai creusé un peu la chose.

Outre le fait que dans un premier temps je n’utilisais pas le bon EntityManager (j’en ai un pour MySQL aussi), je constate que la plateforme et la stratégie d’ajout des guillemets (QuoteStrategy) n’est apparement pas la bonne à un certain moment. J’ai spécifié qu’il faudrait utiliser AnsiQuoteStrategy, mais si je suis pas à pas l’exécution, j’ai la bonne stratégie dans l’EntityManager correct, mais lors de la création de la requête dans le BasicEntityPersister, la plateforme est celle de l’autre EntityManager et la stratégie est celle par défaut…

Edit

Mmm, apparemment changer l’ordre de déclaration des EntityManagers semble régler mon problème. J’avais celui pour MySQL en premier, si je le déplace en suivant, les requêtes pour les deux EntityManagers semblent fonctionner. La stratégie semble rester celle par défaut, mais comme c’est la plateforme qui gère l’échappement des noms de colonnes/tables/etc., ça passe.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte