查询构建器上的paginator调用不返回laravel 4中的paginator对象(在特定情况下)

时间:2013-07-03 18:36:28

标签: php laravel laravel-4 query-builder

问题:

查询构建器:

$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 。或者我错过了一些基本的东西?

1 个答案:

答案 0 :(得分:2)

您需要将返回的值重新分配给$r变量。

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