Bonjour, voila mon problème dans le Model utiliser pour afficher une recherche plusieurs critères sont disponible; titre, auteur, sous-titre ... Dans ma View de recherche je propose de choisir entre un AND ou un OR entre les critères. Tous fonctionnez très bien jusqu'au moment ou il a fallu que je fusionne certain champ pour la recherche titre et sous-titre devant posséder un OR entre les critères. et depuis cela ne fonctionne plus.
y aurait-il une autre solution ?
merci pour votre aide
//Recheche avancée titre et autre ...
if ($titles = $this->getState('title'))
{
//j'enleve le prefixe du titre pour la recherche
$titles = preg_replace ("#^(le |la |les |LE |LA |LES )#","",$titles);
$query->Where("`title` LIKE '%" . $titles . "%'")
->orWhere("`subtitle` LIKE '%" . $titles . "%'")
->orWhere("`coll5` LIKE '%" . $titles . "%'");
}
if ($author_adv = $this->getState('author_adv'))
{
//Il faut creer un table avec chaque terme et effectuer une recherche de ceux ci
$authors = preg_split("/[\s,]+/",$author_adv)
$this->input->set('authors', ['title' =>$authors]);
}
if (($authors = $this->getState('authors')
&& array_filter($authors))
{
$this->whereHas('authors', function(\JDatabaseQuery $q) use ($authors)
{
if (!empty($authors['title']))
foreach ($authors['title'] as $searchauth)
$q->where('`title` LIKE "%' . $searchauth . '%"');
if (!empty($authors['id']))
$q->where('`pivotTable`.`nglibrary_author_id` = ' . $q->q($authors['id']) . '');
});
}
if ($titles = $this->getState('title'))
{
//j'enleve le prefixe du titre pour la recherche
$titles = preg_replace ("#^(le |la |les |LE |LA |LES )#","",$titles);
$query->Where("`title` LIKE '%" . $titles . "%'")
->orWhere("`subtitle` LIKE '%" . $titles . "%'")
->orWhere("`coll5` LIKE '%" . $titles . "%'");
}
if ($author_adv = $this->getState('author_adv'))
{
//Il faut creer un table avec chaque terme et effectuer une recherche de ceux ci
$authors = preg_split("/[\s,]+/",$author_adv)
$this->input->set('authors', ['title' =>$authors]);
}
if (($authors = $this->getState('authors')
&& array_filter($authors))
{
$this->whereHas('authors', function(\JDatabaseQuery $q) use ($authors)
{
if (!empty($authors['title']))
foreach ($authors['title'] as $searchauth)
$q->where('`title` LIKE "%' . $searchauth . '%"');
if (!empty($authors['id']))
$q->where('`pivotTable`.`nglibrary_author_id` = ' . $q->q($authors['id']) . '');
});
}
merci pour votre aide
Commentaire