Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Db
Zend_Db Forum d'entraide pour le composant Zend_Db du Zend Framework (création de requêtes, abstraction, ORM etc.). Avant de poster -> FAQ Zend_Db.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/03/2011, 15h37   #1
Invité de passage
 
Inscription : décembre 2004
Messages : 4
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 4
Points : 1
Points : 1
Par défaut connexion à la bdd en amont d'un db_select

Bonjour,

Je désire effectuer une requête de sélection multitable dans mon contrôleur, sans forcément passer par une classe dbtable_matableXYZ en particulier.

En lisant la doc de Db_Select, les exemples utilisent soit d'un objet $db déjà instancié, soit propose d'utiliser Zend_Db::factory avec des options non explicitées.
Code :
1
2
$db = Zend_Db::factory( ...options... );
$select = $db->select();
Ce qui me rend perplexe, c'est que si j'utilise une classe dérivant de db_table_abstract, la connexion à la base se fait de manière transparente, en utilisant les paramètres stockés dans application.ini (et ça marche)
mais si je veux utiliser un objet db_select, c'est à moi de récupérer tous les paramètres de connexion et de les transmettre à la factory...

Y a-t-il pas un moyen plus simple d'instancier cet objet $db ? (en bref qu'est-ce que je mets à la place de ...options... pour dire de prendre les paramètres définis dans application.ini ?)
D'avance merci pour votre éclairage.
dblbass est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 22h10   #2
Candidat au titre de Membre du Club
 
Inscription : novembre 2005
Messages : 8
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 8
Points : 11
Points : 11
Pour obtenir une connexion via Zend_Db en utilisant la factory du Zend_Db tu dois passer en premier paramètre ton adaptater (MySql, Oracle, ...) et en deuxième paramètre un tableau contenant tes informations de connexion.

Pour récupérer le $config ci dessous je t'invite à voir du coté du Zend_Config

Code :
1
2
3
 
$db = Zend_Db::factory($config->database->adapter,
                                 $config->database->params->toArray());
peterexia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 01h00   #3
Membre régulier
 
Homme Benjamin Dubois
Chef de projet NTIC
Inscription : février 2008
Messages : 65
Détails du profil
Informations personnelles :
Nom : Homme Benjamin Dubois
Localisation : France

Informations professionnelles :
Activité : Chef de projet NTIC

Informations forums :
Inscription : février 2008
Messages : 65
Points : 99
Points : 99
Citation:
Envoyé par dblbass Voir le message
Bonjour,

Je désire effectuer une requête de sélection multitable dans mon contrôleur, sans forcément passer par une classe dbtable_matableXYZ en particulier.

En lisant la doc de Db_Select, les exemples utilisent soit d'un objet $db déjà instancié, soit propose d'utiliser Zend_Db::factory avec des options non explicitées.
Code :
1
2
$db = Zend_Db::factory( ...options... );
$select = $db->select();
Ce qui me rend perplexe, c'est que si j'utilise une classe dérivant de db_table_abstract, la connexion à la base se fait de manière transparente, en utilisant les paramètres stockés dans application.ini (et ça marche)
mais si je veux utiliser un objet db_select, c'est à moi de récupérer tous les paramètres de connexion et de les transmettre à la factory...

Y a-t-il pas un moyen plus simple d'instancier cet objet $db ? (en bref qu'est-ce que je mets à la place de ...options... pour dire de prendre les paramètres définis dans application.ini ?)
D'avance merci pour votre éclairage.
Salut,

Si tu utilises une structure d'application standard, il existe un moyen (bizarre, mais je n'ai pas trouvé mieux) de récupérer ton adaptateur par défaut :

Code :
1
2
<?php
$dbh = Zend_Db_Table::getDefaultAdapter();
Je trouve ça tellement sale que j'ai opté pour une autre option dans mes applications :

- je n'utilise pas le fichier application.ini pour stocker les paramètres de la BDD (de toute façon, c'est pour moi un problème de conception : la base de données n'étant pas forcément utilisée tout le temps, ses paramètres de connexion ne doivent pas être chargés en permanence dans l'ensemble de l'application).

- je place ces informations dans un fichier ini séparé, que je charge au besoin via un objet Zend_Config, lorsque j'ai réellement besoin de me connecter à la base. Ca me permet en outre de ne pas forcément utiliser Zend_Db.


PS : tu ne devrais pas effectuer de requête directement depuis ton controlleur : l'accès aux données est de la responsabilité du modèle. Cela te permet notamment de ne pas avoir à changer ton controlleur le jour où tu décides de modifier le système de stockage de données.En plus, tu risque d'avoir à dupliquer du code, car il est beaucoup plus difficile de rendre un controlleur réutilisable qu'un modèle.
monsieurben est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h07.


 
 
 
 
Partenaires

Hébergement Web