从laravel / eloquent中删除冗余查询

时间:2015-05-26 14:43:33

标签: laravel eloquent

在laravel代码库中,我正在使用这行代码:

    if ($limit === '-1') {
        $items = $query->get();

        if ($items->count() < 1) {
            return Paginator::make([], 0, Config::get('api.result_limit'));
        }

        return $query->paginate($items->count());
    }

$ query是\Illuminate\Database\Eloquent\Relations\HasManyThrough对象。

无论如何,问题是SELECT table_name.*正在执行两次。 $query->get()执行此操作然后$query->paginate执行SELECT COUNT(*)(由于我们已经从第一个查询中获得了计数,因此本身是多余的)和SELECT table_name.*, table_name.*。即。它只是过分冗余,我试图消除这种冗余。

这是我尝试过的。

    return $items之后
  1. $query->get()。不幸的是,这样做会产生以下错误:

    Call to undefined method Illuminate\Database\Eloquent\Collection::getCollection()
    

    $ query-&gt; paginate()返回一个\MyApp\Services\Pagination\Paginator对象,它本身扩展(\Illuminate\Pagination\Paginator)而$ query-&gt; get()返回一个\Illuminate\Database\Eloquent\Collection对象。

    如果我能够以某种方式将\Illuminate\Database\Eloquent\Collection转换为\Illuminate\Pagination\Paginator,我认为这样做可以解决问题,但如果可能的话,可以这么做。

  2. return $query->paginate(99999999)之后立即执行if ($limit === '-1')。这有效,但我不想指定硬限制。在用SQL编写SELECT时我没有指定限制我写作,我也不认为我应该在这里指定一个。我试过了return $query->paginate(-1),但这给了一个错误。

  3. 有什么想法吗?

0 个答案:

没有答案