如何组合多个方法而不在Controller中重复查询?

时间:2017-05-17 18:43:33

标签: php laravel

我有一个方法index

protected function index(Request $request)
{
    $articles = Article::published()->paginate(8);

    return view('pages.blog', [
        'articles'    => $articles,
        'orientation' => $this->getOrientation(),
        $this->getCategory($request)
    ]);
}

方法getCategory()

public function getCategory($request)
{
    if ($request->has('category')){

        $search = $request->get('category');

        $articles = Article::published()
            ->where('orientation', 'LIKE', '%' . $search . '%')
            ->paginate(8);

        return view('pages.blog', [
           'articles' => $articles,
            'orientation' => $this->getOrientation()
        ]);
    }
}

正如您所看到的,我尝试将我的getCategory函数放在索引函数之外。

它的工作原理只有我的调试栏,我有所有SQL查询(索引和getCategory的查询)。

  • 是否可以优化我的代码?你能救我吗?

谢谢

2 个答案:

答案 0 :(得分:0)

如果您需要两个结果,请在索引中为查询添加缓存,并从缓存中获取完整结果。

或者,如果您有所有结果,可以使用集合过滤器从索引中获取相同的集合,并提供您需要的显示数据。

例如getCategory添加param,从index设置集合。在文章中添加过滤器以仅获取您感兴趣的数据。

答案 1 :(得分:0)

我远不是一个编辑来解决这个问题,但现在就去了。第一个功能:

public function index(Request $request)
{
$articles = Article::published()->paginate(8);

return view('pages.blog', [
    'articles'    => $articles,
    'orientation' => $this->getOrientation(),
     //$this->getCategory($request) - this i don't think can work like this. You are calling
     //a function that does not return a value, but instead loads a view, insted:
    'categories' => $this->getCategory($request)//the idea here is you call a function and 
     //get a return as an array
]);
}

第二功能:

public function getCategory($request)
{
if ($request->has('category')){

    $search = $request->get('category');

    $articles = Article::published()
        ->where('orientation', 'LIKE', '%' . $search . '%')
        ->paginate(8);

    $result = [
    'articles' => $articles,
    'orientation' => $this->getOrientation() 
];
}
 else $result = null;
 return $result;
}

这可能再次成为一个菜鸟。但我不明白为什么你需要2个方法,因为有if ($request->has('category')){会产生null。 Idk,试一试......