Php 使用查询生成器的Laravel 5分页
我正在根据查询结果进行Laravel分页,并在视图中呈现。我遵循此指南,但我遇到了一个错误:Php 使用查询生成器的Laravel 5分页,php,laravel,pagination,laravel-5,Php,Laravel,Pagination,Laravel 5,我正在根据查询结果进行Laravel分页,并在视图中呈现。我遵循此指南,但我遇到了一个错误: Call to a member function paginate() on a non-object 我正在使用查询生成器,所以我认为这应该可以吗?这是我的密码 public function getDeliveries($date_from, $date_to) { $query = "Select order_confirmation.oc_number as oc, orde
Call to a member function paginate() on a non-object
我正在使用查询生成器,所以我认为这应该可以吗?这是我的密码
public function getDeliveries($date_from, $date_to)
{
$query = "Select order_confirmation.oc_number as oc,
order_confirmation.count as cnt,
order_confirmation.status as stat,
order_confirmation.po_number as pon,
order_summary.date_delivered as dd,
order_summary.delivery_quantity as dq,
order_summary.is_invoiced as iin,
order_summary.filename as fn,
order_summary.invoice_number as inum,
order_summary.oc_idfk as ocidfk,
order_summary.date_invoiced as di
FROM
order_confirmation,order_summary
where order_confirmation.id = order_summary.oc_idfk";
if (isset($date_from)) {
if (!empty($date_from))
{
$query .= " and order_summary.date_delivered >= '".$date_from."'";
}
}
if (isset($date_to)) {
if (!empty($date_to))
{
$query .= " and order_summary.date_delivered <= '".$date_to."'";
}
}
$query.="order by order_confirmation.id ASC";
$data = DB::connection('qds106')->select($query)->paginate(15);
return $data;
}
公共函数getDeliveries($date\u from,$date\u to)
{
$query=“选择订单\确认.oc\编号作为oc,
订单确认。计入cnt,
订单确认状态为stat,
订单确认。订单编号为pon,
订单\汇总日期\以dd形式交付,
订单\汇总。交货\数量为dq,
订单摘要按iin开具发票,
order_summary.filename作为fn,
订单汇总。发票编号,单位:,
订单_summary.oc_idfk作为ocidfk,
订单汇总日期发票为di
从…起
订单确认、订单汇总
其中order_confirmation.id=order_summary.oc_idfk”;
如果(isset($date_from)){
如果(!空($date_from))
{
$query.=“和订单\u summary.date\u delivered>=”“$date\u from.”;
}
}
如果(isset($date_to)){
如果(!空($date_to))
{
$query.=”和订单\u summary.date\u在此页面的单据中交付:
我们可以看到,我们不是被迫使用雄辩的语言
$users = DB::table('users')->paginate(15);
但是,请确保不要在查询中创建groupBy,因为paginate方法使用它
之后,我不确定您是否可以将paginate与查询生成器一起使用(select($query)
)
---编辑
可以使用paginator类创建集合:
$collection = new Collection($put_your_array_here);
// Paginate
$perPage = 10; // Item per page
$currentPage = Input::get('page') - 1; // url.com/test?page=2
$pagedData = $collection->slice($currentPage * $perPage, $perPage)->all();
$collection= Paginator::make($pagedData, count($collection), $perPage);
在您的视图中,只需使用$collection->render();
您可以使用自定义分页设置它
$query = "Your Query here";
$page = 1;
$perPage = 5;
$query = DB::select($query);
$currentPage = Input::get('page', 1) - 1;
$pagedData = array_slice($query, $currentPage * $perPage, $perPage);
$query = new Paginator($pagedData, count($query), $perPage);
$query->setPath('Your Url');
$this->data['query'] = $query;
return view('Your_view_file', $this->data, compact('query'));
在这里,您可以使用setpath()
指定路径
在您的视图中
@foreach($query as $rev)
//Contents
@endforeach
<?php echo $Reviews->appends($_REQUEST)->render(); ?>
@foreach($queryas$rev)
//内容
@endforeach
追加
将追加数据
谢谢。我就是这样做的,它使用查询生成器并通过分页获得相同的结果
$paginateNumber = 20;
$key = $this->removeAccents(strip_tags(trim($request->input('search_key', ''))));
$package_id = (int)$request->input('package_id', 0);
$movieHasTrailer = MovieTrailer::select('movie_id')->where('status','!=','-1')->distinct('movie_id')->get();
$movieIds = array();
foreach ($movieHasTrailer as $index => $value) {
$movieIds[] = $value->movie_id;
}
$keyparams = array();
$packages = Package::select('package_name','id')->get();
$whereClause = [
['movie.status', '!=', '-1'],
['movie_trailers.status', '!=', '-1']
];
if(!empty($key)){
$whereClause[] = ['movie.title', 'like', '%'.$key.'%'];
$keyparams['search_key'] = $key;
}
if($package_id !== 0){
$whereClause[] = ['movie.package_id', '=', $package_id];
$keyparams['package_id'] = $package_id;
}
$movies = DB::table('movie')
->leftJoin('movie_package','movie.package_id','=','movie_package.id')
->leftJoin('movie_trailers','movie.id','=','movie_trailers.movie_id')
->where($whereClause)
->whereIn('movie.id',$movieIds)
->select('movie.*','movie_package.package_name','movie_trailers.movie_id as movie_id',
DB::raw('count(*) as total_trailers, movie_id')
)
->groupBy('movie.id')
->paginate($paginateNumber);
如果你需要补水,你可以这样做
$pages = DB::table('stuff')
->distinct()
->paginate(24, ['stuff.id']);
$stuffs = Stuff::hydrate($pages->items());
return view('stuff.index')->with('stuffs', $stuffs)->with('pages', $pages)
$Stuff将包含您的模型对象,$pages将包含您的分页,可能不是最有效的,但它可以工作。Hi,我对queryBuilder也有同样的问题,因为get()在where()->get()之后工作,但paginate()之后工作没有。你找到这个问题的解决方案了吗?所以,如果我有一个包含一百万行的表,我想分页,我必须获取全部一百万行。这似乎不是一个好方法。再次,你获取所有行,然后过滤它们,我肯定会在这个问题中对数据库进行限制:以及Bouhnosaure a虽然这可能会回答这个问题,但请考虑增加一些解释。
// import those Class into your Laravel Controller
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Facades\Input;
use Illuminate\Database\Eloquent\Collection;
// In your public function
$query = DB::select(DB::raw("SELECT * FROM your_table"));
$collection = new Collection($query);
// Paginate
$perPage = 10; // Item per page
$currentPage = Input::get('page') - 1;
$pagedData = $collection->slice($currentPage * $perPage, $perPage)->all();
$pagination = new Paginator($pagedData, $perPage);
return response()->json([
$pagination
], 200);
// import those Class into your Laravel Controller
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Facades\Input;
use Illuminate\Database\Eloquent\Collection;
// In your public function
$query = DB::select(DB::raw("SELECT * FROM your_table"));
$collection = new Collection($query);
// Paginate
$perPage = 10; // Item per page
$currentPage = Input::get('page') - 1;
$pagedData = $collection->slice($currentPage * $perPage, $perPage)->all();
$pagination = new Paginator($pagedData, $perPage);
return response()->json([
$pagination
], 200);