首页 > 解决方案 > 过滤范围不返回正确的结果

问题描述

嘿,我正确使用此代码来过滤和搜索基于两个数据列表的表,所以我在我的控制器中编写此代码

  $films = Film::filter()->get();

在我的模型中:

 public function scopeFilter($query)
    {
        $directors = request('director')[0];
        $genres=request('genre')[0];
        if (isset($directors) && $directors != []) {
            foreach ($directors as $director) {
                $query->orwhere('director', $director);
            }
            if( isset($genres) && $genres!=[] ){
                    $query->where(function ($query) use ($genres){
                        foreach ($genres as $genre) {
                            $query->orwhere('genre', $genre);
                        }
                    });
            }
        }else{
            if( isset($genres) && $genres!=[] ){
                foreach ($genres as $genre) {
                    $query->orwhere('genre', $genre);
                }
            }
        }
        return $query;
    }

最后在两个变量之间使用 or 代替并且有人可以解决这个问题吗 谢谢

标签: laravel-5filtereloquent

解决方案


您是否收到错误消息?当你说它不起作用时,具体是什么不起作用?它返回的数据不正确吗?

另外,$directors$genres数组的内容是什么样的?它们只是用 ID 填充的数组吗?如果是,您可以尝试执行whereIn子句,而不必遍历所有项目:

public function scopeFilter($query)
{
    $directors = request('director')[0];
    $genres=request('genre')[0];

    // Assuming they look like this:
    // $directors = [1,2,3];
    // $genres = [4,5,6];

    if (isset($directors) && count($directors)) {
        $query->whereIn('director', $directors);
    }
    else if(isset($genres) && count($genres)) {
        $query->whereIn('genre', $genres);
    }

    return $query;
}

推荐阅读