La classe AppModel dans CakePHP possède un nombre conséquent de méthodes intéressantes, cependant il y a une méthode qui n’a pas été implémentée et qui pourtant peut se révéler particulièrement utile dans certains cas. Il s’agit de la méthode truncate().

Pourquoi cette méthode n’est-elle pas implémentée? Sans doute car trop dépendante du système de base de données utilisé? Ou alors parce que les développeurs du framework n’y voient tout simplement aucun intérêt… Aucune idée, mais ce n’est pas vraiment ce qui nous intéresse, n’est-ce pas? Au lieu de se focaliser sur le pourquoi, concentrons-nous donc sur le comment

La solution que je vais vous montrer pour ajouter la méthode truncate() aux modèles CakePHP doit évidemment suivre le principe DRY, c’est-à-dire qu’on écrit la fonction qu’une seule fois et qu’elle est accessible d’à peu près partout. Et quel meilleur endroit que le fichier AppModel.php pour écrire une méthode accessible par tous les modèles? Hmmm? Et bien il n’y en a pas, on écrira donc notre méthode truncate() dans le fichier Model/AppModel.php.

Un modèle CakePHP est toujours attaché à un objet DboSource. Cet objet possède une méthode intéressante pour récupérer le nom de la table associée au modèle: fullTableName().

1
2
3
4
5
6
7
8
9
10
11
12
// Fichier Model/AppModel.php

/**
* Vide entièrement la table associée au modèle sur lequel est appelé cette méthode
*/
public function truncate() {
   $datasource = $this->GetDataSource();
   $tableName = $datasource->fullTableName( $this, true, true );
   $sql = sprintf( 'TRUNCATE TABLE %s', tableName );

   return $this->query( sprintf( $sql, $tableName ) );
}

Pour exécuter la méthode truncate() sur un de vos modèles, rien de plus facile! En admettant que vous ayez un modèle Comment associé à une table comments, vous exécuterez la méthode de la façon suivante:

1
$this->Comment->truncate();

La méthode proposée ici fonctionne sur MySQL, vous pouvez évidemment l’adapter à vos propres besoins. Une dernière remarque… Si l’un de vos modèles utilise une source de données différente, vous pouvez simplement redéfinir la méthode truncate().

Quelques nouvelles

Bien…. Ca fait plus de 5 mois que je n’ai plus rien posté sur ce blog, la honte! Pourtant les idées se bousculent au portillon…## Ce qu …… Continuer la lecture