Has not and belongs to many
24/12/2008, 09:44 | Tags: cakephp, exists, habtm, not exists | Publié dans cakephp | 3 commentaires
Bon, donc, j’ai une table “articles”, une table “tags”, une table de liaison entre les deux (”articles_tags”, avec ses rituels champs “article_id” et “tag_id”) et je voudrais, par curiosité malsaine sans doute, savoir quels sont les articles qui ne sont associés à aucun tag (pour leur en associer au moins un, par charité probablement).
En SQL “à la main”, ça donnerait ça :
Je ne pense pas qu’il soit possible de reproduire exactement cette requête avec les méthodes magiques de CakePHP.
Donc je suis parti sur une version un peu détournée :
Hum.
Retranscrit en CakePHP, dans une méthode de mon modèle Article, ça donne quelque chose comme ça :
$conditions = array(’ArticlesTag.artist_id IS NULL’);
$contain = array(’ArticlesTag’); // pas besoin de toutes les autres tables
$fields = array(’Article.id’, ‘Article.title’); // les champs dont on a besoin
$params = compact(’contain’, ‘conditions’, ‘fields’);
debug($this->find(’all’, $params));
Vous avez mieux ? je suis preneur…
Dans la série “jouons avec les habtm”, en un peu plus élaboré, je vous invite également à lire ce post de teknoid.
Si vous avez apprécié cet article, abonnez-vous au fil rss de ce blog pour ne pas louper les prochains.






24/12/2008 à 13:30 (#)
Tu peux essayer de rajouter un champ “counterCache” dans ton modèle.
Ensuite tu n’as qu’à faire “tags_count => 0″ dans un WHERE.
Plus d’informations :
http://book.cakephp.org/fr/view/490/counterCache-Mettre-en-cache-les-count
http://www.cakephp.nu/countercache-cakephp-12-beta
http://www.formation-cakephp.com/151/countercache-piege-a-eviter
25/12/2008 à 22:35 (#)
Bonne idée, mais est-ce que ça marche avec les habtm ?
13/01/2009 à 17:44 (#)
Bonne question, j’avoue ne jamais avoir testé et n’ai pas trop le temps de faire un bout de code … si tu as essayé d’implémenter ça je serai intéressé par le retour !