查询构建器:
$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 。或者我错过了一些基本的东西?
答案 0 :(得分:2)
您需要将返回的值重新分配给$r
变量。
$r = DB::table('someTable');
$r = $r->where(....)
$r = $r->paginate(30, array(....))
return $r;