Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 13-12-2012 13:55:39

mtcocktail
Membre
Date d'inscription: 20-09-2012
Messages: 71

ZendDB

J'ai un problème de saturation de mes connections postgres. Et j'ai du mal à comprendre le pourquoi du comment.

J'ai un adaptater Pdo postgres déclaré dans le factory, et utilisation des tablegateway.

J'ai une boucle (pas belle) dans une vue et qui pour chaque objet refait une requête sql. Quand je lance cette vue, toute les requêtes sont lancé en parallèle sur le serveur. Et il ouvre une connexion pour chaque requête.

y'a 300 objet à afficher, il lui faudrait 300 connexion simultanée sad. Bon je sais que faire 300 requêtes dans une même page c'est mal, mais ça me parait bizarre qu'il envoie tous en même temps non ?

Hors ligne

 

#2 13-12-2012 14:06:06

J0r
Membre
Date d'inscription: 27-04-2012
Messages: 57

Re: ZendDB

Comment lances tu les requêtes en parallèle ?

Hors ligne

 

#3 13-12-2012 14:12:21

mtcocktail
Membre
Date d'inscription: 20-09-2012
Messages: 71

Re: ZendDB

Ok je crois que j'ai compris, l'adaptater est créer a chaque requête dans l'objet ou j'ai stocké la fonction qui fait la requête sql, la connexion a la database est ouverte au moment de la requête et elle n'est pas global pour tous les appel à l'objet.

Je sais c'est mal mais j'ai toujours pas réussi à faire autrement. sad (lié a mon topic : http://www.z-f.fr/forum/viewtopic.php?id=8323)

Est-ce qu'il y'aurais moyen de forcer la fin de la connection ouverte par $adaptater->query() ?

Hors ligne

 

#4 13-12-2012 14:47:16

mtcocktail
Membre
Date d'inscription: 20-09-2012
Messages: 71

Re: ZendDB

Ok j'ai trouvé, il suffit de passer à ma fonction un adapter qui vient du controler.

J'ai mis dans mon controler :

Code:

$sm=$this->getServiceLocator();
$adapter=$sm->get('Zend\Db\Adapter\Adapter');

$view = new ViewModel(array('objets'=>$objets,'adapter'=>$adapter));

Dans ma vue :

Code:

<?foreach($objets as $objet) :?>
...
$objet->getUrlCategory($adapter);
...
<?endforeach;?>

Et la déclaration de ma fonction dans ma classe objet :

Code:

public function getUrlCategory(&$adapter) {
....

}

Et là j'ai plus ce problème de connexion.

Dernière modification par mtcocktail (13-12-2012 15:23:49)

Hors ligne

 

#5 13-12-2012 14:57:52

Roromix
Membre
Date d'inscription: 05-12-2011
Messages: 55

Re: ZendDB

Je te conseille de créer une propriété $adapter dans ton objet $objet.

Si tu plusieurs objets qui utilisent la même connexion, fait une propriété static dans un objet abstrait qui sera étendu par tout tes objets.
Et pour définir ton adapter, dans ton contolleur, tu Set l'objet abstrait.
ObjectAbstrait::setAdapter($adapter);

Dernière modification par Roromix (13-12-2012 15:28:54)

Hors ligne

 

#6 13-12-2012 15:30:55

J0r
Membre
Date d'inscription: 27-04-2012
Messages: 57

Re: ZendDB

Et accessoirement, sort ce traitement de la vue, je vois pas trop ce qu'il fait là.

Hors ligne

 

#7 13-12-2012 17:29:21

mtcocktail
Membre
Date d'inscription: 20-09-2012
Messages: 71

Re: ZendDB

Je voudrais bien le sortir de la vue, mais je voies pas encore trop comment.

Je passe à ma vue un objet tablegateway de plusieurs enregistrement.

Un foreach dessus me permet d'instancier automatiquement chaque enregistrement avec mon objet.

Mais cet objet est lié à un autre objet/table , je dois accéder alors au valeurs de cet objet/table à chaque itération.

sad

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages