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 22/01/2007, 10h33   #1
Candidat au titre de Membre du Club
 
Inscription : février 2003
Messages : 18
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 18
Points : 11
Points : 11
Par défaut Travailler sur 2 BDDs

yop,

Comment travailler avec des models basés sur des bases différentes.

Exemple : dans la même méthode je veux pouvoir

$a = new AA();
$b = new BB();

AA étant une table de la base 1 et BB une table de la base 2.
Je ne vois pas comment faire étant donné que setDefaultAdapter affecte tous les objets Zend_Db_Table.

help ....
krull est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2007, 09h26   #2
Rédacteur
 
Avatar de doctorrock
 
Homme Julien Pauli
Architecte de système d'information
Inscription : mai 2006
Messages : 597
Détails du profil
Informations personnelles :
Nom : Homme Julien Pauli
Âge : 29
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : mai 2006
Messages : 597
Points : 5 015
Points : 5 015
Je ne me suis jamais posé la question, mais setDefaultAdapter() fonctionnant pour toutes les tables, ca semble en effet impossible.

Cependant des propositions de refactoring sont prévus pour les 2 versions à venir, avec de bonnes idées en exploitation ( notamment pourvoir lier les instances de Zend_Db_Table, lorsque 2 tables sont liées par clé étrangère ).

Je pense que ta requête devrait être prise en compte, elle a déja fait l'objet de demandes sur les forums officiels du Framework.
doctorrock est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2007, 14h10   #3
Candidat au titre de Membre du Club
 
Inscription : février 2003
Messages : 18
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 18
Points : 11
Points : 11
En grattant un peu il suffit de passer le nom de la clé de stockage dans le registre de ton factory lors de l'instanciation du model.

$a = new AA(array("db"=>"base1");
$b = new BB(array("db"=>"base2");

il faut juste préalablement avoir bien entendu fait un Zend_Db::factory avec la config de la seconde base et l'avoir enregistré grâce a Zend::register.

Et ca marche.

Sinon c'est clair pouvoir faire du find avec une jointure comme dans rails, ca manque cruellement vivement les prochaines versions
krull est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2007, 15h44   #4
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 251
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 251
Points : 1 514
Points : 1 514
bah, dans tes requetes, il te suffit de préciser sur quelle base tu est

Code :
select ta_base.ta_table.ta_colonne
Doksuri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2007, 16h21   #5
Rédacteur
 
Avatar de doctorrock
 
Homme Julien Pauli
Architecte de système d'information
Inscription : mai 2006
Messages : 597
Détails du profil
Informations personnelles :
Nom : Homme Julien Pauli
Âge : 29
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : mai 2006
Messages : 597
Points : 5 015
Points : 5 015
Citation:
Envoyé par DEMMOTTE
bah, dans tes requetes, il te suffit de préciser sur quelle base tu est

Code :
select ta_base.ta_table.ta_colonne
Non, en fait en utilisant Zend_Db_Table, tu n'écris plus aucune requête manuellement ( mappage Objet )
doctorrock est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2007, 16h46   #6
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 251
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 251
Points : 1 514
Points : 1 514
ah ok, autant pour moi
Doksuri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2007, 16h11   #7
Membre à l'essai
 
Inscription : avril 2006
Messages : 93
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 93
Points : 21
Points : 21
Salut, j'ai récessement fallu que je m'adapte a une structure merdique qui était faite sur plusieurs base de données et fallait que je fasse des liens entres: voilà ma solution...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?PHP

define("BASE","nombase1");
define("BASE2","nombase2");
define("HOST","localhost");
define("USER","root");
define("PASS","mdp");

class BaseITES{


	var $lien, $resultat;
	
	function BaseThomas(){
		$this->lien = NULL;
		$this->resultat = NULL;
	}

	function connecter(){
			
		$this->lien = mysql_connect(constant("HOST"), constant("USER"), constant("PASS"));
		
		if ( !$this->lien ){
			die("Could not connect: " . mysql_error());
		}
		
		mysql_select_db(constant("BASE"), $this->lien) or die("Select DB Error: " . mysql_error());
			
	}
	
	function connecter2(){
			
		$this->lien = mysql_connect(constant("HOST"), constant("USER"), constant("PASS"));
		
		if ( !$this->lien ){
			die("Could not connect: " . mysql_error());
		}
		
		mysql_select_db(constant("BASE2"), $this->lien) or die("Select DB Error: " . mysql_error());
			
	}
	
	function deconnecter(){
		mysql_close( $this->lien );
	}
	
	function effectuer($requete){
		$this->resultat = mysql_query($requete, $this->lien) or die("Could not query: " . mysql_error().":".$requete);
		return $this->resultat;
	}
...
Puis par la suite tu n'as qu'a appellé tes base comme suis:
Code :
1
2
3
4
5
6
7
include_once("BaseITES.php");
 
$bd = new BaseITES();
 
$bd->connecter();
// ou
$bd->connecter2();
thomfort est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h59.


 
 
 
 
Partenaires

Hébergement Web