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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 +%'
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.