Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用查询生成器的codeigniter 4中的分页问题_Php_Codeigniter - Fatal编程技术网

Php 使用查询生成器的codeigniter 4中的分页问题

Php 使用查询生成器的codeigniter 4中的分页问题,php,codeigniter,Php,Codeigniter,我非常喜欢使用查询生成器处理ci4,但我发现很难进行分页 当选中文档时,它只解释如何与模型一起使用,而不解释查询生成器 我尝试在查询中使用手动分页和设置偏移量,但没有正常工作,而不是返回下一个分页。它只为下一个分页返回一个结果,并将其连接到ckurent分页。我公然被困在这里 控制器: $blog = new BlogModel(); //* Retrieve blogs $total = $blog->getActiveBlogTotal

我非常喜欢使用查询生成器处理ci4,但我发现很难进行分页

当选中文档时,它只解释如何与模型一起使用,而不解释查询生成器

我尝试在查询中使用手动分页和设置偏移量,但没有正常工作,而不是返回下一个分页。它只为下一个分页返回一个结果,并将其连接到ckurent分页。我公然被困在这里

控制器:

$blog = new BlogModel();

            //* Retrieve blogs
            $total = $blog->getActiveBlogTotal();

            $segment = route_to('adminBlogPost', 'active');
            if($this->request->uri->getTotalSegments() == 4)
            {
                $page = $this->request->uri->getSegment(4);
            }
            else
            {
                $page = 1;
            }
            $perPage = 5;
            $pages = $pager->makeLinks($page, $perPage, $total, 'admin_pag', 5);

            $blogs = $blog->getActiveBlogsInAdmin($page);
            return $this->smarty->view('blog/active.tpl', compact(
                'blogs',
                'pages'
            )); 
型号:

//* Get blog in admin
public function getActiveBlogsInAdmin($page)
{

    $table = $this->db->table('zd_blogs');
    $table->select('*');
    $table->join('zd_main_cats', 'zd_main_cats.main_cat_id = zd_blogs.blog_main_cat', 'left');
    $table->join('zd_users', 'zd_users.user_id = zd_blogs.blog_user', 'left');
    $table->where('zd_blogs.blog_status', 1);
    $table->where('zd_blogs.blog_deleted', 0);
    $table->orderBy('zd_blogs.blog_id', 'DESC');
    $table->limit(5, $page);
    $query = $table->get();
    if($table->countAllResults() > 0)
    {
        return $query->getResult();
    }
    else
    {
        return FALSE;
    }
} 

如果有人能给我一个明确的答案,我将不胜感激。看来你把事情搞混了。使用函数
getActiveBlogsInAdmin()
中的LIMIT子句,数据库查询被限制为5个结果。因此,在当前分页设置中,您将始终只有一页

您需要返回完整的数据集,以便Pager类可以呈现First/Last/etc.页面链接


删除行:
$table->limit(5,$page)

不知道您是否已经找到了解决方案,但是您可以执行以下操作(对于CI4)

在控制器中,执行以下操作

$pager=service('pager); //instantiate pager..
$page=(int)(($this>request->getVar('page)!==null)?$this->request->getVar('page'):1)-1; //limit  ie ?page=1 would be set to page=0;
$perPage =  5; //offset
$total = $blog->getActiveBlogTotal();
$pager->makeLinks($page,$perPage,$total);
$data['pager'] = $pager;
在模型中,修改功能如下

public function getActiveBlogsInAdmin($page=0,$perPage=1000) and..

$table->limit($page, $perPage);
在视图中添加

<?= $pager->links() ?>
和使用

$query = $builder->get($page, $perPage); 
我也有同样的问题。 但我试着修补一下,效果很好。 你可以试试这个

  • 型号

我最近开始使用codeigniter 4,面临同样的问题。我有下面的代码来解决这个问题。这是我的密码:

控制器:-

$myModel = new MyModel();
$contest_images = $myModel->my_method_name();

$pager=service('pager');
$page=(int)(($this->request->getVar('page')!==null)?$this->request->getVar('page'):1)-1;
$perPage =  12;
$total = count($contest_images);
$pager->makeLinks($page+1, $perPage, $total);
$offset = $page * $perPage;
$data['result'] = $myModel->my_method_name($perPage, $offset);
public function my_method_name($perPage = null, $offset = null){
    $builder = $this->db->table("my_db_table");
    return $builder
        ->select()
        ->join('db_table_two','db_table_two.table_two_id = my_db_table.table_id')
        ->limit($perPage, $offset)
        ->get()
        ->getResult();
}
<?php $pager = \Config\Services::pager(); ?>
<?php if ($pager):?>
    <?php $pagi_path = 'my_controller/my_model'; ?>
    <?php $pager->setPath($pagi_path); ?>
    <?= $pager->links(); ?>
<?php endif; ?>
型号:-

$myModel = new MyModel();
$contest_images = $myModel->my_method_name();

$pager=service('pager');
$page=(int)(($this->request->getVar('page')!==null)?$this->request->getVar('page'):1)-1;
$perPage =  12;
$total = count($contest_images);
$pager->makeLinks($page+1, $perPage, $total);
$offset = $page * $perPage;
$data['result'] = $myModel->my_method_name($perPage, $offset);
public function my_method_name($perPage = null, $offset = null){
    $builder = $this->db->table("my_db_table");
    return $builder
        ->select()
        ->join('db_table_two','db_table_two.table_two_id = my_db_table.table_id')
        ->limit($perPage, $offset)
        ->get()
        ->getResult();
}
<?php $pager = \Config\Services::pager(); ?>
<?php if ($pager):?>
    <?php $pagi_path = 'my_controller/my_model'; ?>
    <?php $pager->setPath($pagi_path); ?>
    <?= $pager->links(); ?>
<?php endif; ?>
视图(分页代码):-

$myModel = new MyModel();
$contest_images = $myModel->my_method_name();

$pager=service('pager');
$page=(int)(($this->request->getVar('page')!==null)?$this->request->getVar('page'):1)-1;
$perPage =  12;
$total = count($contest_images);
$pager->makeLinks($page+1, $perPage, $total);
$offset = $page * $perPage;
$data['result'] = $myModel->my_method_name($perPage, $offset);
public function my_method_name($perPage = null, $offset = null){
    $builder = $this->db->table("my_db_table");
    return $builder
        ->select()
        ->join('db_table_two','db_table_two.table_two_id = my_db_table.table_id')
        ->limit($perPage, $offset)
        ->get()
        ->getResult();
}
<?php $pager = \Config\Services::pager(); ?>
<?php if ($pager):?>
    <?php $pagi_path = 'my_controller/my_model'; ?>
    <?php $pager->setPath($pagi_path); ?>
    <?= $pager->links(); ?>
<?php endif; ?>


请你帮我解决一下,我被困在这里了,请你删除行
$table->limit(5,$page)?是的,但它会返回所有查询。我100%搞不清楚如何设置您的困惑是试图用查询限制数据集,不要这样做。只需返回数据库的完整集合,无需将其限制在那里(对于任何分页reasn),然后只需遵循给定代码的问题是什么?你是怎么做到的?