Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
** Ce message a été déplacé dans ce forum - Il était précédemment dans le forum MVC **
Bonjour,
Je viens de commencer un site avec ZF et j'ai affiché le profiler de Zend_DB et je me rends compte qu'il y a pas mal de requêtes en doublons.
J'ai créé un model Article.php qui etend Zend_DB_Table et à chaque fois que je crée une nouvelle instance de Article() j'ai une requête "DESCRIBE `articles`"
Mon soucis c'est que si j'affiche une liste de 50 articles a chaque fois que je vais faire une nouvelle instance je vais avoir cette requête et donc 50 requêtes pour une seule page !
Au final j'ai peur d'avoir bcp d'accès à la base de données pour "pas grand chose".
Pensez-vous que c'est génant ? Y a t'il une solution pour éviter ceci ?
Peut-être ne pas utiliser Zend_DB...
Je m'en remet à votre expérience.
Merci pour vos réponses.
Cordialement,
Kaimite
Dernière modification par Kaimite (21-06-2008 15:03:44)
Hors ligne
Ca se cache avec un Zend_Cache, c'est expliqué en documentation :
Zend_Db_Table::setDefaultMetadataCache($cache);
Avec $cache, par exemple, utilisant APC (c'est ce que j'utilise comme cache OPCode):
$cache = Zend_Cache::factory('Core','APC',array('lifetime'=>7200,'automatic_serialization'=>true),array());
Hors ligne
Kaimite a écrit:
Mon soucis c'est que si j'affiche une liste de 50 articles a chaque fois que je vais faire une nouvelle instance je vais avoir cette requête et donc 50 requêtes pour une seule page !
C'est pas un peu bourrin d'instancier 50 fois le model pour afficher une liste ? xD Une instanciation + requête suffisent non ?
Hors ligne
Bonjour, ou bonsoir.
Voici comment je fait pour ma liste :
Je récupère les ids des articles demandées :
$select = $this -> select() -> from($this -> _name, 'uid') -> where('`rubriques_id` = ?', $rubriques_id) -> where ("`actif` = '1'") -> order ("date_ajout DESC"); $Rows = $this -> fetchAll($select); if ( sizeof($Rows) > 0 ) { foreach ($Rows AS $Row) { $Row = $Row -> toArray(); $Retour[] = new Article($Row['uid']); } return $Retour; }
Comme çà pour chaque article je peux utiliser ses méthodes :
$unArticle -> recupererInfos();
$unArticle -> preparerInfosPourWeb();
etc.
J'ai donc bien x instance de ma class Article();
Comment faites-vous de votre coté ?
Merci de vos réponses.
Cordialement,
Kaimite
Hors ligne
Pages: 1