Конструктор запросов:
$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 . или я пропустил что-то основное здесь?