Php 将Eloquent\Builder作为参数传递

Php 将Eloquent\Builder作为参数传递,php,laravel,laravel-5,eloquent,laravel-5.1,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('identif

也许这是一个简单的答案,但我找不到! 我使用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'));
}
它工作得很好,但是现在,我想优化它,创建另一个函数来接收$query。大概是这样的:

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);
    }
但是,我的观点并不是什么都没有显示。我做错什么了吗? 我应该使用模型而不是生成器参数吗?如果我这样做,那么它将显示以下错误:

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

这句话正是我给我的新职能打电话的地方。 提前感谢。

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

替换

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


“公共函数displayResult(Builder$query,Request$Request)”是导致错误的当前函数签名吗?该错误表示函数要求将模型作为第一个参数传递,但此处第一个参数暗示为生成器-您能检查“use”语句吗?生成器似乎是模型类的别名。不,当我调用displayResult函数时会显示错误,这意味着,从索引函数中。如果我将参数设置为Model,则会显示错误。如果我设置为Builder,则不显示任何内容,只显示一个空白页。即使我在use语句中使用了Builder和Model这两个类,我明白了。好的,Builder是displayResult第一个参数的正确类型-我看不出为什么要将其更改为Model。我想我明白为什么现在就把答案贴在空白页上了。
return $this->displayResult($query, $request);