throwawaydev
throwawaydev

Reputation: 53

Laravel Searching returns all data instead of wanted data

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

Answers (1)

Maksim
Maksim

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

Related Questions