php - 遍历查询构建器实例,删除一些项目然后返回修改后的实例

标签 php laravel eloquent

我有一个正在为服务器端搜索/过滤功能构建的查询,我有一个查询构建器实例,每次用户检查新过滤器时都会更改它,一切顺利,直到我有一个检查过滤器对于多对多关系。

首先是我 Controller 中的代码:

public function index()
    {

        $hotels = (new Hotel)->newQuery();

        if (request()->has('category_id')) {
            $hotels->whereIn('category_id', request()->category_id);
        }


        if(request()->has('location_id')) {
            $hotels->whereIn('location_id', request()->location_id);
        }

        if(request()->has('facility_id')) {
            $filtered = $hotels->get()->filter(function ($hotel) {
                return $hotel->facilities()->whereIn('facility_id', [4])->get()->isNotEmpty();
            });

           // dd($filtered);
        }

        request()->flash();

        if(count(request()->all())) {
            $hotels = $hotels->paginate(2)->appends([
                'category_id' => request('category_id'),
                'location_id' => request('location_id'),
            ]);
        }

        if(! count(request()->all())) {
            $hotels = Hotel::inRandomOrder()->paginate(8);
        }

        return view('hotels', compact('hotels'));
    }

这就是问题所在,假设我有 20 条记录,我需要直接修改并从 $hotels 中删除任何空集合(a hotel)匹配 filter() 方法,但发生的是 $hotels 变量与所有 20 条记录保持相同,我必须改为使用新变量,即 $filtered 来从 filtered() 方法中获取修改后的结果,但在那种情况下我无法继续在 $hotels 实例上构建,如果假设我更改了结尾支持新的 $filtered 变量的代码,如果请求中没有 facilities,我的代码就会中断。

总而言之,这就是我需要的,我需要遍历 $hotels 变量,删除一些项目,然后将 $hotels 作为查询构建器返回以保留以此为基础。

这是我尝试过的:

  • 我尝试了 reduce 方法,它的工作方式几乎与 filter() 类似,我不得不使用一个新变量来获取结果,但是 filter()更好。

  • 假设“facilities”是我在返回前调用的最后一个查询,我尝试将 $hotels 重新分配给 $filtered,如 $hotels = $filtered 因为我不会不再需要查询构建器了吗?但是在代码的底部我对结果进行了分页,这不起作用,它告诉我 paginate() 方法不存在于我认为收藏。

最佳答案

类似这样的东西

if(request()->has('facility_id')) {
    $hotels->whereHas('facilities', function ($query) {
        return $query->whereIn('facility_id', [4])->where('facility_id', '<>', '');
    });
}

关于php - 遍历查询构建器实例,删除一些项目然后返回修改后的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53649754/

相关文章:

php - Heredoc 字符串和 TCPDF 构建动态 PDF

php - Laravel 4 Auth::attempt() 总是返回 false

validation -::back Controller 中的 laravel 验证输出

php - 如何通过 .htaccess 保护 phpmyadmin 访问

php - 使用Codeigniter框架连接DSN

php - "Method brand does not exist."

php - [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]在 Laravel 中使用 model::with 时转换失败

laravel - 如何使用Plastic/Elasticsearch搜索相关数据?

php - session 、位置命令在 000webhost 中不起作用

laravel - 如何在查看 Blade Laravel 中检查集合是否为空?