Php 使用查询生成器的Laravel 5分页

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

我正在根据查询结果进行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,
    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);