1
検索機能を作成しましたが、代わりにwhere
節が1つ働いています。私は、結果がまだ出版されていない項目を表示しないようにしたい。検索機能が不要な結果を返します。
データベース内の項目がpublished = 0
の場合、検索条件に一致してもページに表示しないでください。
これは
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'));
}
私は何を追加したことは、この条件を運ぶが、私はまだページで公開されていない項目が表示されるはずです
$query->where('published', 1);
である私の関数です。何故ですか?
は、SQLから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
ありがとうございました。私はこれを試したが、まだすべての結果を参照してください。問題のSQLを追加しました – Ivan
あなたはまだ他の条件があります。 – Devon
はい、他のテーブルを探しているからです。 – Ivan