J'ai fait la fonction de recherche qui ressemble fonctionne à la place une clause where
. Je veux dans les résultats ne pas montrer les éléments qui ne sont pas encore publiés.La fonction de recherche renvoie les résultats non désirés dans Laravel
Donc, si l'article a published = 0
dans la base de données ne devrait pas être montré sur la page même si est rencontré les conditions de recherche.
C'est ma fonction
public function search(Request $request)
{
$searchText = strip_tags($request['q']);
$seachLocation = strip_tags($request['l']);
$columns =['alias','description'];
$query = Item::select('*');
$query->where('title', 'like', '%'.$searchText.'%');
$query->where('published', 1);
foreach($columns as $column) {
$query->orWhere($column, 'like', '%'.$searchText.'%', '%'.$seachLocation.'%');
}
$query->orWhereHas('category',function($query) use ( $searchText) {
$query->where('title', 'like', '%'.$searchText.'%');
});
$query->orWhereHas('country',function($query) use ( $searchText) {
$query->where('name', 'like', '%'.$searchText.'%');
});
$items = $query->paginate(5);
$searchQuery = $searchText;
$searchQueryLoc = $seachLocation;
return view('search', compact('items','searchQuery','seachLocation'));
}
Ce que j'ai ajouté est
$query->where('published', 1);
qui devrait porter cette condition, mais je vois encore des articles non publiés à la page. Pourquoi donc?
toSql retour
select * from `items` where `title` like ? and `published` = ? and (`alias` like ? or `description` like ?) or exists (select * from `categories` where `items`.`category_id` = `categories`.`id` and `title` like ?) or exists (select * from `countries` where `items`.`country_id` = `countries`.`id` and `name` like ?) limit 5 offset 0
Merci. J'ai essayé mais je vois toujours tous les résultats. J'ai ajouté le sql en question – Ivan
Vous avez toujours l'autre ou les conditions en place. – Devon
Oui, parce qu'ils regardent d'autres tables. – Ivan