Précédent   Forum du club des développeurs et IT Pro > PHP > Bibliothèques et frameworks > CakePHP
CakePHP Forum d'entraide sur le framework PHP CakePHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 03/09/2012, 12h42   #1
gogetenk
Candidat au titre de Membre du Club
 
Inscription : août 2011
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 28
Points : 13
Points : 13
Par défaut Find avec postConditions multi modèles (HABTM)

Bonjour à tous,
je suis actuellement en train de développer une application de gestion de publications pour l'entreprise de mon stage.

C'est sur la fonctionnalité de recherche de publications que je pèche.
En effet, j'ai besoin de faire un find multi modèles pour croiser les infos des champs que l'utilisateur aura rempli. Par exemple du style Publication.titre LIKE {input} AND Tag.name LIKE {input} retournerai la ou les publications correspondantes.

Pour info : Une publication HABTM tags, une publication BelongsTo Categorie et Section.
J'ai bien ajouté le comportement containable à mes modèles.

Voici mon find :

Code :
1
2
3
4
5
$conditions = $this->postConditions($this->data, array('Publication.titre' => 'LIKE', 'Publication.observation' => 'LIKE', 'Tag.name' => 'LIKE'), 'AND', true);
 
$publications = $this->Publication->find('all', compact('conditions'));
 
$this->set('publications', $publications);
Voici la requête SQL que cake renvoie :

Code :
1
2
3
4
5
SQL Query: SELECT `Publication`.`id`, `Publication`.`titre`, `Publication`.`cellule`, `Publication`.`category_id`, `Publication`.`created`, `Publication`.`modified`, `Publication`.`fichier`, `Publication`.`observation`, `Publication`.`section_id`, `Category`.`id`, `Category`.`parent_id`, `Category`.`nom`, `Category`.`created`, `Category`.`publication_id`, `Category`.`parent`, `Category`.`lft`, `Category`.`rght`, `Section`.`id`, `Section`.`name`, `Section`.`created`, `Section`.`publication_id`
 FROM `bicprive`.`publications` AS `Publication` 
LEFT JOIN `bicprive`.`categories` AS `Category` ON (`Publication`.`category_id` = `Category`.`id`) 
LEFT JOIN `bicprive`.`sections` AS `Section` ON (`Publication`.`section_id` = `Section`.`id`) 
WHERE `Publication`.`titre` LIKE '%new%' AND `Publication`.`observation` LIKE '%%' AND `Tag`.`name` LIKE '%douane +%'
Citation:
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Tag.name' in 'where clause'

Bizarrement, Cake fait bien la jointure avec Section et Category, mais pas avec Tag. Donc impossible de find Tag.name...
Je rappelle que puisque je suis dans un cas de HABTM, j'ai bien une table PublicationsTags fonctionnelle.

J'ai essayé tous les niveaux de récursivité pour tous mes modèles, rien n'y fait. Le seul moyen de faire une jointure serait de faire une requête perso en SQL mais cela me retourne plusieurs fois les mêmes publications car il y a souvent plusieurs tags par publications !

Auriez vous un moyen de FORCER la jointure avec Tag afin d'utiliser postConditions ? Conventionnel ou non, quitte à "magouiller" un peu les bonnes façons de coder avec cake ? La deadline approche et il faut que je me libère de ce problème !

Merci d'avance pour votre aide !

Yannis.
gogetenk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h38.


 
 
 
 
Partenaires

Hébergement Web