X
En programmant..., La boîte à menthol..., Open Source

Doctrine ORM 1.2 et OCI8…

11 mars 2011 4

Doctrine, c’est top…
Un outil quasi-automatique qui arriverait presque à supprimer la notion de SQL dans une application…

Il génère son fichier de configuration, les classes des modèles et fait aussi le café.
Dix caractères de configuration, trois lignes de commande et ça tourne…

Enfin, en général…

Car Doctrine se présente comme une surcouche de l’interface d’abstraction de bases de données PDO.
Mais quand on travaille avec Oracle, il arrive parfois que l’on ne puisse pas utiliser l’extension PDO_OCI en raison de son statut expérimental.

La chaîne de connexion suivante devient alors un doux rêve :

oci:dbname=//<ip>:<port>/<db_name>

Heureusement, et il faut fouiller dans les classes pour le voir, Doctrine possède un adapter pour Oracle qui utilise la fameuse extension OCI8.
Plusieurs syntaxes sont acceptées par cette classe.

Avec le couple IP/SID, par exemple :

oracle:dbname=//<ip>:<port>/<sid>

Ou encore en utilisant un TNSNAME configuré sur la machine :

oracle:dbname=<tns_name>

Les chaînes de connexions peuvent être complétées avec les paramètres habituels (charset, etc.).
L’important étant de conserver le mot clé oracle:

Il y a 4 commentaires

  • Florian dit :

    Merci beaucoup !
    Je me voyais mal recréer un Adapter pour utiliser la librairie Oci8 plutôt que Pdo_Oci..

    En changeant un seul mot, j’ai réglé tous mes problèmes de CLOB !

    @+

  • Aurélien dit :

    Ravi d’avoir pu aider !

  • ffrey dit :

    Je suis en train de tester avec ‘oracle’ comme dit dans l’article.
    J’arrive à faire des requêtes avec « Doctrine_Query::create() ». Par contre, les methodes magique « find » (findOneBy(), etc.) ne fonctionnent pas. Elles renvoient l’erreur  » oci_fetch_array(): 1533 is not a valid oci8 statement resource ».
    As-tu le même souci ?

  • Aurélien dit :

    Les « findBy » fonctionnent bien par contre je n’ai pas testé avec les « findOneBy »…

  • Laisser un commentaire

    Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *