如何过滤laravel集合

时间:2017-11-03 10:20:26

标签: php laravel collections filter eloquent

我正在尝试在laravel中制作一个过滤器。以下过滤器工作

if __name__ == '__main__':

def fizzbuzz(n):
    try:
        if(0<= n <= 99):
            for i in range(n):
                if i==0:
                    print("0")
                elif (i%3==0 and i%7==0) :
                    print("fizzbuzz")
                elif i%3==0:
                    print("fizz")
                elif i%7==0:
                    print("buzz")
                else:
                    print(i)    
    except Exception:
        print("/// ATTENTION:The number you entered was not in between 0 and 99///")   

try:
    enteredNumber = int(input("Please enter a number in between 0 and 99: "))
    fizzbuzz(enteredNumber)
except Exception:
    print("/// ATTENTION: Something went wrong here. Next time, try to enter a valid Integer ////")

但是当我尝试做这样的事情时

$posts= Post::where('category',$request->category)->orderBy('id','desc')->paginate(10);

它不起作用。有人可以解释为什么这样,并为我提供有效的代码。我的项目有多个过滤器。

错误 enter image description here

3 个答案:

答案 0 :(得分:0)

因为$posts = Post::all();已经执行了查询。

Post::where('category',$request->category)->latest()->paginate(10)->get();

就是你想要的。

注意:latest需要created_at

答案 1 :(得分:0)

你应该去

$posts = Post::where('category',$request->category)->latest()->paginate(10);

get请求是不必要的,因为paginate将执行查询。

答案 2 :(得分:0)

第一个通过分页进行查询,即每个构建页面获取10条记录

对于第二个,基于观察,您很可能遇到至少2个错误: 第一个是在使用get方法的行上,因为该方法至少需要一个参数。

Type error: Too few arguments to function Illuminate\Support\Collection::get()

另一个,因为它是一个集合,因为没有类似于paginatelatest方法的集合因此抛出其他错误。您应该检查Collection的Available methods,以便了解收集时允许的方法。

最好的解决方案之一是在进行查询时简单地对结果进行排序:

Blog::where('category',$request->category)
    ->orderBy('created_at', 'desc') //you may use also 'updated_at' also depends on your need
    ->paginate(10);

通过这种方式,您可以获得最新的分页,并且不必担心paginating a collection