Doctrine PHP (Doctrine 1.x)
Par PlaceOweb le samedi, avril 24 2010, 14:41 - PHP - Lien permanent
Quelques notes sur l'ORM Doctrine PHP dans sa version 1.x (équivalent de l'ORM Java Hibernate en PHP). Pour la version récente, voyez Doctrine 2 PHP.
DQL Update NULL avec Doctrine
Pour mettre à jour une valeur qui peut être nulle ou peut contenir une valeur valide non nulle, il vous faut faire un if ternaire : condition ? true : false
->set('leChamp', (($laValeur=== null) ? 'NULL' : '?'), $laValeur)
ou coder le if
- pour le null
->set('leChamp', 'NULL');
- pour la valeur (non nulle)
->set('leChamp', '?', $laValeur);
Mais ne surtout pas faire :
$laValeur = null; ->set('leChamp', '?', $laValeur);
équivalent à
->set('leChamp', '?', null);
car cela provoque l'erreur suivante : Fatal error: Uncaught exception 'Doctrine_Connection_Mysql_Exception' with message 'SQLSTATEHY093: Invalid parameter number: number of bound variables does not match number of tokens'
DQL Update fails with passed NULL value (closed defect: invalid)
When you want to set null values, you have to use the second argument.
->set('f.bar', 'NULL');
Let's imagine a real life situation. If may be NULL or a valid value... so your code will be something like:
->set('f.bar', (($value === null) ? 'NULL' : '?'), $value)
Utilisation basique de Doctrine
Select Doctrine
$users = Doctrine::getTable('User')->findAll(); foreach($users as $user) { echo $user->name; }
Insert Doctrine
$user = new User(); $user->name = "marie"; $user->password = "xxx"; $user->save(); echo "L'utilisateur avec l'id $user->id a été ajouté";
Update Doctrine
$user = Doctrine::getTable('User')->findBy(2); $user->phone = "09 22 22 22"; $user->save();
Delete Doctrine
$user = Doctrine::getTable('User')->findByName("marie"); $user->delete();
Les "Magic Finders"
Les patterns de base pour les méthodes de recherche (Magic Finders) sont les suivants : findBy%s($valeur) ou findOneBy%s($valeur). Le %s peut être un nom de colonne ou un alias de relation.
// Recherche par la clé primaire : $tableClass->find($primaryKey); $user = $userTable->find(1); // Recherche par champs : (username) : $tableClass>findOneByUsername($searchInput); $userTable->findOneByUsername('jonwage'); // En combinant les critères de recherche : $user = $userTable->findOneByUsernameAndPassword('jonwage', md5('changeme')); $users = $userTable->findByIsAdminAndIsModeratorOrIsSuperAdmin(true, true, true);
Ressources
- Doctrine
- Developpez.com : Bases de données > Mapping objet relationnel (ORM) et persistance > Doctrine
- Wkipedia : Doctrine (ORM), Doctrine (PHP)
- Introduction à Doctrine et Le composant Table
- Doctrine, ORM pour PHP. Introduction et mise en oeuvre.
- Utilisation d'un ORM : les bases de Doctrine
- Introduction à php doctrine
Les versions de Doctrine 1.2.x
- Doctrine 1.2.4 2011-03-21
- Doctrine 1.2.3 2010-08-24
- Doctrine 1.2.2 2010-03-29
- Doctrine 1.2.1 2009-12-07