Reputation: 613
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()
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
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