Monty Monro
Monty Monro

Reputation: 613

Laravel: Call to undefined method Illuminate\Database\Eloquent\Collection::where()

I am having a problem in this controller function. The function takes an optional 'search' parameter and uses it to search through en employers available jobs for keywords. When I am calling this function I am getting the following error.

Call to undefined method Illuminate\Database\Eloquent\Collection::where()

enter image description here

Here is my relevant code. Any advice would be much appreciated!

Routes: (prefix: '/api/v1/')

Route::get('employer/{employerId}/jobs', 'EmployersController@getJobs');

Controller:

public function getJobs ($employerId) {

    $search = Input::get('query');

    $jobs = Job::getAvailableByEmployer($employerId, $search);
    return $jobs;
}

Model:

public static function getAvailableByEmployer($employerId, $search=NULL)
{
    $jobs = Job::where('jobs.employer_id', '=', $employerId)
                ->where('jobs.status', '=', 'Available')
                ->orderBy('jobs.created_at', 'desc')
                ->get();

    if ($search)
    {
        $jobs->where('title', 'LIKE', '%'. $search .'%')
            ->orWhere('description', 'LIKE', '%'. $search .'%');
  }

        return $jobs;
}

Upvotes: 1

Views: 12806

Answers (1)

The Alpha
The Alpha

Reputation: 146239

Make your function like this:

public function scopeGetAvailableByEmployer($query, $employerId, $search = null)
{
    $query->where('employer_id', '=', $employerId)
            ->where('status', '=', 'Available')
            ->orderBy('created_at', 'desc');
            
    
    if ($search) {
        $jobs->where('title', 'LIKE', '%'. $search .'%')
             ->orWhere('description', 'LIKE', '%'. $search .'%');
    }

    return $query;
}

Now call it like (scope lets you call statically):

$jobs = Job::getAvailableByEmployer($employerId, $search)->get();

Also remember that, once you call get() then you can't make any query because that is not a Query Builder anymore but a Collection object.

Upvotes: 4

Related Questions