Laravel:调用未定义的方法 Illuminate\Database\Eloquent\Collection::where()

问题描述 投票:0回答:1

我的控制器功能有问题。该函数采用可选的“搜索”参数,并使用它在雇主中搜索可用职位的关键字。当我调用此函数时,出现以下错误。

调用未定义的方法 Illuminate\Database\Eloquent\Collection::where()

enter image description here

这是我的相关代码。任何建议将不胜感激!

路由:(前缀:'/api/v1/')

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

控制器:

public function getJobs ($employerId) {

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

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

型号:

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;
}
php search laravel undefined where-clause
1个回答
4
投票

使你的函数像这样:

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;
}

现在这样称呼它(

scope
让您静态调用):

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

还要记住,一旦调用

get()
,就无法进行任何查询,因为它不再是
Query Builder
,而是
Collection
对象。

© www.soinside.com 2019 - 2024. All rights reserved.