【发布时间】:2023-04-10 22:44:01
【问题描述】:
我在 Laravel-4 之外使用 Eloquent ORM,并且正在构建一个自定义分页器。
首先,我使用 Fluent Query Builder 构建查询。我想使用count() 获取查询可以返回的结果数,然后使用take(x) 和skip(y) 进行自定义分页。我需要在take()->skip()->get() 之前执行count(),这样我就不会超出页面范围。问题是当我在查询中使用count() 方法时,它似乎删除了我之前添加的任何select。
我将问题隔离到这个简单的例子中:
$query = DB::table('companies')
->join('countries','companies.country_id','=','countries.id')
->select(
'companies.name as company_name',
'countries.name as country_name'
);
$nbPages = $query->count();
$results = $query->get();
//$results contains all fields of both tables 'companies' and 'countries'
如果我颠倒计数的顺序并得到,它工作正常:
$results = $query->get();
$nbPages = $query->count();
//$results contains only 'company_name' and 'country_name'
问题:有没有更优雅的方式来使用这样的东西:
$tmp = clone $query;
$nbPages = $tmp->count();
$results = $query->get();
【问题讨论】: