Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel post数据在控制器内运行_Php_Function_Post_Laravel_Controller - Fatal编程技术网

Php Laravel post数据在控制器内运行

Php Laravel post数据在控制器内运行,php,function,post,laravel,controller,Php,Function,Post,Laravel,Controller,目前,我的HomeController如下所示: class HomeController extends BaseController { public function getHome() { $scripts = Script::select('script.*', DB::raw('COALESCE(SUM(vote.rating), 0) as rating')) ->leftJoin('script_vo

目前,我的HomeController如下所示:

class HomeController extends BaseController {

    public function getHome()
    {
        $scripts = Script::select('script.*', DB::raw('COALESCE(SUM(vote.rating), 0) as rating'))
                    ->leftJoin('script_vote as vote', 'vote.script_id', '=', 'script.id')
                    ->with('tags')
                    ->orderBy('rating', 'desc')
                    ->orderBy('views', 'desc')
                    ->groupBy('id')
                    ->paginate(8);

        return View::make('home')->with('scripts', $scripts);
    }

    public function postSearch()
    {
        $input = array(
            'query'    => Input::get('query'),
            'sort_col' => Input::get('sort_col'),
            'sort_dir' => Input::get('sort_dir'),
        );

        $scripts = Script::select('script.*', DB::raw('COALESCE(SUM(vote.rating), 0) as rating'))
                    ->leftJoin('script_vote as vote', 'vote.script_id', '=', 'script.id')
                    ->where('title', 'LIKE', '%' . $input['query'] . '%')
                    ->orderBy($input['sort_col'], $input['sort_dir'])
                    ->orderBy('views', 'desc')
                    ->groupBy('id')
                    ->with('tags')
                    ->paginate(8);

        Input::flash();

        return View::make('home')->with('scripts', $scripts);
    }

}

如您所见,我使用(几乎)相同的大查询两次。我想调用
getHome()
函数中的
postSearch()
函数,并给出三个参数(query=''、sort\u col='rating',sort\u dir='desc')。这可能吗?

以下是一些可能性:

  • 在控制器内编写一个私有函数getScripts(…)(不那么性感)
  • 在脚本模型上添加一个
    getScripts(…)
    函数(so lala sexy)
  • 创建用于封装模型并将其注入控制器的

如果您计划经常使用此功能,我会将其从控制器中移出,并作为一个整体放入您的模型中。即使作为私有函数,它在控制器中也没有位置

public function scopeRating($query)
{
    return $query->select('script.*', DB::raw('COALESCE(SUM(vote.rating), 0) as rating'))
                ->leftJoin('script_vote as vote', 'vote.script_id', '=', 'script.id')
                ->with('tags')
                ->orderBy('rating', 'desc')
                ->orderBy('views', 'desc')
                ->groupBy('id');
}
这可以这样称呼

Script::rating();