Reputation: 53
My search functionality uses laravel. Whenever I'd search something, instead of returning the wanted result, it returns all the data within the database. For eg: if I searched 'a', it will return all data from the database.
My Search form is
<form class="form-inline my-2 my-md-0" action="/search" method="GET">
<input class="form-control" type="text" placeholder="Search">
</form>
Search.blade.php
@section('content')
@if($search->isNotEmpty())
@foreach ($search as $searched)
<div class="post-list">
<p>{{ $searched->filename }}</p>
<p>{{ $searched->albumname }}</p>
<p>{{ $searched->artistname }}</p>
@endforeach
@else
<div>
<h3>No songs/artist/albums found</h3>
</div>
@endif
@endsection
Search routing
Route::get('/search', [UploadController::class,'search']);
UploadController.php
public function search(Request $request){
$searching = $request->input('search');
// $posts = DB::select('select * from users where active = ?', [1])
$search = MusicUpload::query()
->where('filename','LIKE',"%{$searching}%")
->orWhere('artistname','LIKE',"%{$searching}%")
->orWhere('albumname','LIKE',"%{$searching}%")
->get();
return view('pages.search',compact('search'));
}
I think there is problem with the upload query in the controller, but I haven't found out the exact place where the problem occurs.
Upvotes: 1
Views: 915
Reputation: 2957
You must out or
queries in callback - call-back here like a braces in sql query.
Or you can put this query to scope:
class MusicUpload extends Model
{
public function scopeSearch($query, $search)
{
return $query->where(function($query){
$query->where('filename','LIKE',"%{$searching}%")
->orWhere('artistname','LIKE',"%{$searching}%")
->orWhere('albumname','LIKE',"%{$searching}%");
});
}
}
$searching = $request->input('search');
$search = MusicUpload::search($searching)->get();
return view('pages.search',compact('search'));
Upvotes: 1