0

问题:

查询生成器:

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

现在打电话get_class()$rIlluminate\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。还是我在这里缺少一些基本的东西?

4

1 回答 1

2

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

$r = DB::table('someTable');
$r = $r->where(....)
$r = $r->paginate(30, array(....))
return $r;
于 2013-07-04T07:21:19.070 回答