Hello !
Je suis en train de développer un formulaire de recherche pour un site sur le quel je bosse.

Disons que j'ai des posts liés aux tags. Je récupère l'ensemble sur la fonction index() du PostsController (avec un containable).
Donc ça, ça marche nickel.

J'ai ensuite mon formulaire de recherche (qui fait appel à une fonction search dans mon PostsController).
Sur mon form, j'ai deux champs : le nom d'un posts ET le nom d'un tag à rechercher.
Je récupère très bien le nom du post, mais impossible de faire la liaison avec les tags.

PS : j'ai bien rajouté la ligne suivante dans ma fonction search() :

$this->Post->contain('Tag');

Et pour effectuer ma recherche j'ai fait ceci :

if( $this->request->is('post') || $this ->request->is('put') ) {
            $d'posts'] = $this->Post->find('all', array(
                'conditions' => array(
                    'Post.name LIKE' => '%' . $this->data'Post']'name'] . '%',
                    'Tag.name LIKE' => '%' . $this->data'Tag']'name'] . '%'
                )
            ));
        }

Quelqu'un aurait une idée ?
Merci d'avance :)

2 réponses


salut

je viens de faire un test avec une table User et une table Group. elles sont reliés entre elle comme ceci:
user => $belongsTo = array('Group');

quand je recherche un user et son group, ca me retourne bien un array. si iln'existe pas l'array est vide.

public function search(){
if($this->request->is('post')){
$d = $this->request->data;

$result = $this->User->find('all',array(
'conditions'=>array(
'username LIKE' => '%' . $d'username'] . '%',
'Group.name LIKE' => '%' . $d'group'] . '%'
)
));

debug($result);

}
}

Je n'ai pas testé avec le contain mais essaye ca.

reivaxui
Auteur

Salut,
Merci ça fonctionne là.
En fait j'ai un léger problème (je pense que ce n'est pas grand chose) mais ça fonctionne si le choix des tags se fait sous forme de liste select (donc un seul choix possible). Hors, je voudrais que ce soit un choix multiple sous forme de checkbox et là j'ai un 'hic'.

Voici le résultat que j'obtiens :

array(
    'Post' => array(
        'name' => 'mon titre'
    ),
    'Tag' => array(
        'name' => array(
            (int) 0 => 'tag1',
            (int) 1 => 'tag2'
        )
    )
)

J'ai pensé à un find('list') mais ça n'a pas l'air de fonctionner :(

Voici le find('all') de mon controller :

$d'posts'] = $this->Post->find('all', array(
                'conditions' => array(
                    'Post.name LIKE' => '%' . $d'Post']'name'] . '%',
                    'Tag.name LIKE' => '%' . $d'Tag']'name'] . '%'
                )
            ));

Et le find('list') que j'ai essaye :

$d'posts'] = $this->Post->find('list', array(
                'recursive' => 1,
                'conditions' => array(
                    'Post.name LIKE' => '%' . $d'Post']'name'] . '%',
                    'Tag.name LIKE' => '%' . $d'Tag']'name'] . '%'
                )
            ));

ce qui me retourne l'erreur suivante :

Notice (8): Array to string conversion [APP/Controller/PostsController.php, line 58]

Merci d'avance !