вызов paginator в построителе запросов не возвращает объект paginator в laravel 4 (в конкретном случае)

Проблема:

Конструктор запросов:

$r = DB::table('someTable');
$r->where(....)
$r->paginate(30, array(....))
return $r;

Теперь вызов get_class() на $r дает Illuminate\Database\Query\Builder

Но после открытия vendor/laravel/framework/src/Illuminate/Database/Query/builder.php я увидел это,

public function paginate($perPage = 15, $columns = array('*'))
{
    $paginator = $this->connection->getPaginator();


    if (isset($this->groups))
    {
        return $this->groupedPaginate($paginator, $perPage, $columns);
    }
    else
    {            
        return $this->ungroupedPaginate($paginator, $perPage, $columns);
    }
}

Строка выше, return $this->ungroupedPaginate($paginator, $perPage, $columns);, действительно возвращает объект Illuminate\Pagination\Paginator.

Но после этого он снова становится объектом построитель запросов.

Однако,

если я делаю непрерывную цепочку, как показано ниже

$r = DB::table('someTable')->where(...)->orderBy(....)->paginate(....)

Он возвращает объект Paginator.

В обоих приведенных выше случаях вызов toSql() возвращает один и тот же sql, который выполняется. Таким образом, строитель строит один и тот же запрос, только возвращая разные объекты в двух вышеуказанных случаях.

Что может быть причиной этого? потому что, на мой взгляд, результирующий объект в обоих вышеупомянутых случаях должен быть одним и тем же, а именно Paginator. или я пропустил что-то основное здесь?


person itachi    schedule 03.07.2013    source источник
comment
Я надеюсь, вы понимаете, что последний метод, который вы вызываете, это paginate, и вам интересно, почему вы получаете возвращаемый объект с разбиением на страницы...   -  person castis    schedule 03.07.2013
comment
@castis нет. Я не возвращаю объект Paginator и, следовательно, вопрос.   -  person itachi    schedule 04.07.2013


Ответы (1)


Вам необходимо переназначить возвращаемое значение переменной $r.

$r = DB::table('someTable');
$r = $r->where(....)
$r = $r->paginate(30, array(....))
return $r;
person Jason Lewis    schedule 04.07.2013