问题:
查询生成器:
$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。因此,builder 正在构造相同的查询,仅在上述两种情况下返回不同的对象。
这可能是什么原因?因为在我看来,上述两种情况下的结果对象应该是相同的,即Paginator。还是我在这里缺少一些基本的东西?