将Eloquent \ Builder作为参数传递

时间:2015-12-09 01:08:10

标签: php laravel laravel-5 eloquent laravel-5.1

可能这是一个简单的答案,但我找不到它! 我正在使用Eloquent对数据库执行查询,具有以下代码:

public function postSearch(Request $request)
{
    $query = Customer::select('identification', 'first_name', 'second_name', 'first_lastname', 'second_lastname', 'genre')
                ->where('identification', 'LIKE', "%$request->identification%")
                ->where('first_name', 'LIKE', "%$request->first_name%")
                ->Where('second_name', 'LIKE', "%$request->second_name%")
                ->Where('first_lastname', 'LIKE', "%$request->first_lastname%")
                ->Where('second_lastname', 'LIKE', "%$request->second_lastname%")
                ->Where('genre', 'LIKE', "%$request->genre%");
    $request->session()->put('list', $query->get());
    $customers = $query->paginate(20);
    return view('customer.index', compact('customers'));
}

/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */
public function index(Request $request)
{
    $query = Customer::select('identification', 'first_name', 'second_name', 'first_lastname', 'second_lastname', 'genre');
    $request->session()->put('list', $query->get());
    $customers = $query->paginate(20);
    return view('customer.index', compact('customers'));
}

它完美无缺,但现在,我想优化它,创建另一个接收$查询的功能。像这样:

public function displayResult(Builder $query,Request $request)
    {
        $request->session()->put('list', $query->get());
        $customers = $query->paginate(20);
        return view('customer.index', compact('customers'));
    }

目标是从我以前的方法调用函数,例如:

public function index(Request $request)
    {
        $query = Customer::select('identification', 'first_name', 'second_name', 'first_lastname', 'second_lastname', 'genre');
        $this->displayResult($query, $request);
    }

但是,我的观点并没有显示任何内容。难道我做错了什么? 我应该使用Model而不是Builder参数吗?如果我这样做,那么它会显示以下错误:

  

参数1传递给   App \ Http \ Controllers \ CustomerController :: displayResult()必须是   App \ Http \ Controllers \ Model的实例,实例   Illuminate \ Database \ Eloquent \ Builder给出,在第54行调用....并定义

这条线正是我呼唤新功能的地方。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的 displayResult()方法会返回视图实例,但您忘记从控制器的 index()方法返回它。

替换

$this->displayResult($query, $request);

return $this->displayResult($query, $request);