首页 > 解决方案 > Laravel 有更好的方法来编写我的数据库查询,也许是条件子句

问题描述

我有一个分类广告项目,用户可以在其中发布帖子。我有一个“帖子”模型,它有一个城市、类别和子类别。当用户搜索分类广告时,我编写的代码如下所示:

    $posts = Post::all();

    if($city != 'uk')
    {
        $posts = $posts->where('city', $city);
    }

    if($category != 'cat')
    {      
        $posts = $posts->where('category', $category);
    }

    if($sub_category != 'all')
    {
        $posts = $posts->where(['category' => $category, 'sub_category' => $sub_category]);
    }

城市、类别和子类别变量来自加载的 URL。

我在问是否有更有效的方法来编写代码并获得结果?因为如果 Posts 数据库表变得非常大,每次用户点击该 URL 时我都会得到很多结果,然后过滤结果。另外,我想对结果进行分页,但不能让它工作?

提前致谢。

标签: databaselaravel

解决方案


不确定对您有多大帮助,但您也可以这样做

 $posts = Post::query();

 $posts->when($city != 'uk', function ($q) use($city){
   $q->where('city',$city);
 });

 $posts->when($category != 'cat', function ($q) use($category){
   $q->where('category',$category);
 });

 $posts->when($sub_category != 'all', function ($q) use($sub_category,$category){
   $q->where(['category' => $category, 'sub_category' => $sub_category]);
 });

$posts = $posts->get();

推荐阅读