Bonjour à tous,
Je dois faire un recherche des mes champs content et name.
Ce code fonctionne avec un mot
$search = $this->request->data'Search']'key'];
$this->loadModel('Page');
$d'pages'] = $this->Page->find('all', array(
'conditions' => array(
'online'=>'1',
'type'=>'page',
'created <= NOW()',
'id > 1',
'OR' => array(
'Page.name LIKE'=>'%'.$search.'%',
'Page.content LIKE'=>'%'.$search.'%'
)
),
'fields'=> array('name','content','created','id','type')
));
Si dans la variabel $search, il y a le mot "web", il va me retourner toutes les enregistrements contenant ce mot.
Mais si je mets "web design" ou "web internet" ou web travail dormir"
Il me retiurne rien du tout.
Je n'ai aucune idée comment faire qu'il considere comme deux critère de recherche
Avez vous une idée
Je pense que le like foire si tu as un espace entre chaque mots.
Du coup il faudrait sur ton $search fasse un explode et un like par mot.
$search = $this->request->data'Search']'key'];
$searchTerms = explode(' ', $search);
$searchTermBits = array();
foreach ($searchTerms as $term) {
$term = trim($term);
if (!empty($term)) {
$searchTermBits] = "Page.name LIKE '%$term%'";
}
}
$this->loadModel('Page');
$d'pages'] = $this->Page->find('all', array(
'conditions' => array(
'online'=>'1',
'type'=>'page',
'created <= NOW()',
'id > 1',
'OR' => array(
implode(' AND ', $searchTermBits),
'Page.content LIKE'=>'%'.$search.'%'
)
),
'fields'=> array('name','content','created','id','type')
));
Ta requête ressemblera à quelque chose comme ça à la fin :
....Page.name LIKE '%web%' AND Page.name LIKE '%travail%' AND Page.name LIKE '%dormir%'....
Je ne suis pas du tout sur de ce que je t'apporte là, ne m'en veux pas si ça ne fonctionne pas :D
Voici une idée :
Je vais travailler le $search avec str_word_count
$tab=str_word_count($search);
ce qui me donnera un tableau contenant tous mes mots.
Array
(
[0] => mot1
[1] => mot2
[2] => mot3
)
Je n'ai plus qu'a faire une boucle sur ce tableau pour créer mes conditions. Je verrais bien une checkbox pour demander a l utilisateur s'il préfère un match query ou un match word.
++