查询生成器上的分页器调用不会在laravel 4中返回分页器对象(在特定情况下) [英] paginator call on query builder does not return paginator object in laravel 4 (in a specific case)

查看:47
本文介绍了查询生成器上的分页器调用不会在laravel 4中返回分页器对象(在特定情况下)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

查询构建器:

$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后,我看到了这个

But after opening up vendor/laravel/framework/src/Illuminate/Database/Query/builder.php, i saw this,

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对象.

The line above, return $this->ungroupedPaginate($paginator, $perPage, $columns); indeed returns a Illuminate\Pagination\Paginator object.

但是在那之后,它再次成为查询生成器对象.

But after that, it again becomes the query builder object.

如果我像下面这样做一个连续的链条

if i do a continuous chain, like below

$r = DB::table('someTable')->where(...)->orderBy(....)->paginate(....)

它返回一个 Paginator 对象.

在以上两种情况下,调用toSql()都会返回正在运行的相同sql.因此,在上述两种情况下,构建器将构造相同的查询,仅返回不同的对象.

In both the above two cases, calling toSql() returns the same sql which is being run. So builder is construting the same query only returning different objects in above two cases.

这可能是什么原因?因为我认为上述两种情况下的结果对象应该相同,即 Paginator .还是我在这里缺少一些基本的东西?

What may be the cause of this? because in my opinion, the resulting object in both the above two cases should be same which is Paginator. or am i missing something basic here?

推荐答案

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

You need to re-assign the returned value to the $r variable.

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

这篇关于查询生成器上的分页器调用不会在laravel 4中返回分页器对象(在特定情况下)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆