Php Laravel post数据在控制器内运行
目前,我的HomeController如下所示: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
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(…)(不那么性感)
- 在脚本模型上添加一个
函数(so lala sexy)getScripts(…)
- 创建用于封装模型并将其注入控制器的
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();