问题:
查询生成器:
$r = DB::table('someTable');
$r->where(....)
$r->paginate(30, array(....))
return $r;
现在在$r
上调用get_class()
会得到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(....)
它返回一个分页器对象。
在以上两种情况下,调用toSql()
将返回正在运行的相同sql。所以在上述两种情况下,构建器构造的是同一个查询,只返回不同的对象。
这可能是什么原因造成的?因为在我看来,在以上两种情况下产生的对象应该是相同的,即分页器。还是我错过了一些基本的东西?
您需要将返回的值重新分配给$r
变量。
$r = DB::table('someTable');
$r = $r->where(....)
$r = $r->paginate(30, array(....))
return $r;