如何使用paginate和findwhere相同? (laravel 5.3)

时间:2017-01-19 21:54:37

标签: php laravel repository laravel-5.3

我使用第三方。我从这里开始:https://github.com/andersao/l5-repository

我在文件存储库中的功能是这样的:

public function displayList($year, $id = NULL)
{
    $clauses = ['year' => $year];
    if(isset($id)) {
        $clauses = array_merge($clauses, ['id' => $id]);
    }
    $query = Self::orderBy('programcode')
                 ->orderBy('accountcode')
                 ->findWhere($clauses)
                 ->paginate(1);
    return $query;
}

执行时,会出现如下错误:Method paginate does not exist.

我尝试删除->findWhere($clauses)。有用。没错。

Findwhere和paginate显然无法同时运行

这个问题有解决方法吗?

2 个答案:

答案 0 :(得分:2)

这是因为->findWhere(...)结束了查询with ->get()并返回结果(eloquent collection)。

您尝试做的是在eloquent collection上调用->paginate(...)方法。它实际上是query builder上的一种方法。

<强> 解决方案

applyConditions

$query = Self::orderBy('programcode')
             ->orderBy('accountcode')
             ->applyConditions($clauses)
             ->paginate(1);

修改

好的,->applyCondtions()不会返回该对象,因此您无法将方法链接起来。试试这个:

$query = Self::orderBy('programcode')
    ->orderBy('accountcode');
$query->applyConditions($clauses);
$query = $query->paginate(1);

答案 1 :(得分:2)

像这样:

@ResponseBody
@GetMapping("/test6")
Mono<List<String>> test6(){
    List<String> indecies = Arrays.asList("1","2");

    return Flux.fromIterable(indecies)
               .flatMap(k -> Flux.fromIterable(myRepository.getList(k)).subscribeOn(Schedulers.parallel()),2)
               .collectList();

}