IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Zend_Db
        Comment construire l'objet $db ?
        Zend_Db est-il sensible à la casse ?
        Comment ne plus écrire de requêtes SQL ?
        Quels adapteurs sont disponibles ?
        Est-ce que ZF peut s'occuper de la liaison entre les tables ?
        Peut-on faire de l'héritage de tables avec le ZF ?
        3.1. Zend_Db_Select (5)
                Comment faire un SELECT ?
                Comment faire un SELECT MAX() ?
                Comment appliquer ORDER BY aux fonctions find<TableClass> ?
                Comment savoir combien d'enregistrements sont retournés par ma requête ?
                SQLServer : Syntaxe incorrecte (General error 10007)

rechercher
precedent    sommaire    suivant    telechargermiroir


Comment construire l'objet $db ?
auteur : Guillaume Rossolini
Pour construire un objet $db permettant d'utiliser la base de données, une solution est d'utiliser la méthode abstraite Zend_Db::factory().
Exemple pour MySQL avec PDO
$params = array
(
	'host'     => 'localhost',
	'username' => 'yogui',
	'password' => '1234',
	'dbname'   => 'developpez'
);

try
{
	$db = Zend_Db::factory('PDO_MYSQL', $params);
	$db->getConnection();
}
catch (Zend_Db_Adapter_Exception $e)
{
	echo $e->getMessage();
}

Zend_Db::factory() utilise des adaptateurs (Zend_Db_Adapter_*) pour initialiser la connexion. Cela signifie que vous pouvez utiliser un pilote direct comme MySQLi, DB2 ou Oracle, mais aussi passer par PDO pour avoir plus de flexibilité.

lien : fr Présentation du Zend Framework - Zend_Db
lien : faq Quels adapteurs sont disponibles ?

Zend_Db est-il sensible à la casse ?
auteur : Reveur
Lorsque vous utilisez PDO pour les accès à la base de données, l'extension PDO est configurée par ZF avec la constante PDO::CASE_NATURAL par défaut, ainsi les noms des tables et des champs peuvent être précisés indifféremment en majuscules ou minuscules.

Si vous souhaitez modifier ce comportement, utilisez le code suivant :
$db = Zend_Db::factory('PDO_MYSQL', $params);
$db->setParams(PDO::CASE_LOWER);

Comment ne plus écrire de requêtes SQL ?
auteurs : Julien Pauli, Guillaume Rossolini
Zend_Db permet de s'affranchir du code SQL, mais les fonctionnalités de mapping relationnel objet (ORM) sont encore plus utiles. Le Zend Framework propose cette l'ORM grâce à la classe Zend_Db_Table_Abstract.

Exemple :
<?php
  class Membres extends Zend_Db_Table_Abstract
  {
    protected $_name = 'Membres';

    protected $_primary = 'num';

    protected $_dependentTables = array('Emprunts');

    public function findByNom($nom){
		$where = $this->getAdapter()->quoteInto('nom = ?',(string)$nom);
		return $this->fetchRow($where);
	}
  }
?>
<?php
  $tableMembre = new Membres();
  $julien = $tableMembre->findByNom('julien');
  $julien->date_naissance = '1982-12-08';
  $julien->save();
?>
lien : fr Présentation du Zend Framework - #Zend_Db, par Julien Pauli
lien : fr EZPDO: Object-Relational Mapping en PHP, par Pierre-Nicolas Mougel

Quels adapteurs sont disponibles ?
auteur : Guillaume Rossolini
Utilisez toujours en la doc en ligne pour obtenir la réponse à ce genre de questions.

À ce jour, vous pouvez utiliser les adaptateurs suivants :
  • db2
  • mysqli
  • oracle
  • pdo_mssql
  • pdo_mysql
  • pdo_oci
  • pdo_pgsql
  • pdo_sqlite
lien : faq Comment construire l'objet $db ?

Est-ce que ZF peut s'occuper de la liaison entre les tables ?
auteurs : Julien Pauli, Guillaume Rossolini
Oui, avec un peu de bonne volonté ;)

Les tuples des tables sont identifiés par un numéro automatique. Zend Framework permet de faire des requêtes en chaîne, de la forme (pour trouver le message #1 d'un forum) :
$message = $messages->find(1)->current();

C'est pratique ; néanmoins, à l'issue de cette requête, j'obtiens l'identifiant de l'auteur $message->id_auteur plutôt que son nom. Je suis donc obligé de faire une seconde requête pour trouver le nom de l'auteur à partir de son identifiant :
$auteur = $auteurs->find($message->id_auteur)->current();

Une solution pour éviter tout ce travail est d'étendre Zend_Db_Table_Abstract et d'utiliser cette nouvelle classe dans nos développements.

Plus de détails dans l'atelier par Julien.

lien : fr Atelier ZF : Des résultats pertinents avec les tables liées : l'ORM en mode FullLoading, par Julien Pauli

Peut-on faire de l'héritage de tables avec le ZF ?
auteurs : Guillaume Rossolini, Julien Pauli
Ce n'est pas prévu par le framework de départ mais c'est possible en utilisant la classe de Réflexion introduite depuis PHP5.

lien : fr Documentation sur la Réflexion
lien : fr Atelier : Implémentation de l'héritage de tables SQL sous Zend Framework, par Julien Pauli

rechercher
precedent    sommaire    suivant    telechargermiroir

Consultez les autres F.A.Q's


Valid XHTML 1.1!Valid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2007 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.